Gradient boosting for data classification using Smile
Code: "classify_gradboost.py". Programming language: Python DMelt Version 2.2. Last modified: 03/12/2018. License: Pro
https://datamelt.org/code/cache/classify_gradboost_8125.py
To run this script using the DMelt IDE, copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.


"""
 Gradient boosting for classification. Gradient boosting is typically used
 with decision trees (especially CART regression trees) of a fixed size as
 base learners. For this special case Friedman proposes a modification to
 gradient boosting method which improves the quality of fit of each base
 learner.
"""

from smile.data import AttributeDataset,NominalAttribute
from smile.data.parser import DelimitedTextParser,IOUtils
from smile.classification import  GradientTreeBoost
from smile.math import Math
from smile.sort import  QuickSort
from jhplot import * 
from java.io import File
from jarray import zeros,array
import java


# this function extract data[][] and label[] array from datasets
def getJavaArrays(dataset):
    rows=dataset.size()
    lst = [0.0]*rows
    twoDimArr = array([lst,[]], java.lang.Class.forName('[D'))
    data = dataset.toArray(twoDimArr)
    label = dataset.toArray(zeros(rows, "i"))
    return data,label

http="http://datamelt.org/examples/data/usps/"
print "Reading data from",http
datasource="zip.train"  
datasetName="USPS Train"
print Web.get(http+datasource)

parser =DelimitedTextParser()
parser.setResponseIndex(NominalAttribute("class"), 0)
train=parser.parse(datasetName,File(datasource))
x,y=getJavaArrays(train)

print "Getting test data.." 
datasource="zip.test"
datasetName="USPS Test"
print Web.get(http+datasource)
test=parser.parse(datasetName,File(datasource))
testx,testy=getJavaArrays(test)

for i in range(len(y)):
      if y[i] != 0: y[i] = 1
for i in range(len(testy)):
      if testy[i] != 0: testy[i] = 1

print "Classify.."
boost = GradientTreeBoost(train.attributes(), x, y, 100)
rows=len(testx)

e=0.0
for i in range(rows):
    minput=testx[i].tolist()
    expected=testy[i]
    predicted=boost.predict(testx[i])
    if (i%100==0): print " expected=",expected," prediction=",predicted
    if (expected != predicted): e=e+1.0
e=e/rows

accuracy = boost.test(testx, testy);
for i in range(len(accuracy )):
          print  "Tree accuracy=", i, 100.0 * accuracy[i-1]

importance = boost.importance()
index = QuickSort.sort(importance)
for i in range(len(importance)):
     print train.attributes()[index[i]], importance[i]

print "GradientTreeBoost error rate=",e



You see the box below because you did not login.