3 . 使用 scikit-learn 决策树实现简单预测

各环境安装

我使用的是python3环境

安装scikit-learn:pip3 install scikit-learn

安装numpy:pip3 install numpy

安装scipy:pip3 install scipy

安装matplotlib:pip3 install matplotlib

我的原始数据是Excel文件,将它保存为csv格式,如allElectronicData.csv

from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO

allElectronicsData = open(r'C:UsersLenovoDesktopAllElectronics.csv','rt')
#打开这个csv文件储存到allElectronicsData
reader = csv.reader(allElectronicsData)#reader = csv.reader(f) 此时reader返回的值是csv文件中每行的列表,将每行读取的值作为列表返回,此时reader是一个列表
headers = next(reader)#python中有个csv包(build-in),该包有个reader,按行读取csv文件中的数据,也就是读取列表中的数据
#此时headers是特征列表

#print(headers)
featureList = []#创建两个列表
labelList = []

for row in reader:#遍历reader列表的每一行
    labelList.append(row[len(row)-1])#将reader的每一行的最后的元素添加到labelLiat列表的末尾(也就是yes 和 no 的那个属性)
    rowDict = {}
    for i in range(1,len(row)-1):#从第2列开始遍历当前一行的每一列属性元素
        rowDict[headers[i]] = row[i]#将每一行的特征和相对的属性生成一个字典
    featureList.append(rowDict)#把生成的字典加入到列表
#print(featureList)

vec = DictVectorizer()#把featureList列表特征向量化
dummyX = vec.fit_transform(featureList).toarray()#然后转换成01列表

#print('dummyx: '+str(dummyX))
#print(vec.get_feature_names())#打印特征的名字

#将预测数据二值化
lb = preprocessing.LabelBinarizer()  #创建一个LabelBinarizer的实例lb
dummyY = lb.fit_transform(labelList)  #调用 lb 的fit_transform函数,将yes 和 no 转化成01
#print("dummyY: "+ str(dummyY))  #打印结果

# 创建决策树
clf=tree.DecisionTreeClassifier(criterion='entropy')#指明为那个算法
clf=clf.fit(dummyX,dummyY)
#print('clf:'+str(clf))


# 预测数据
one=dummyX[2, :]
#print('one'+str(one))
# one输出为one[1. 0. 0. 0. 1. 1. 0. 0. 1. 0.]
# 上面的数据对应下面列表:
#['age=middle_aged', 'age=senior', 'age=youth', 'credit_rating=excellent', 'credit_rating=fair', 'income=high', 'income=low', 'income=medium', 'student=no', 'student=yes']

# 设置新数据
new=one
new[4]=1
new[3]=0
predictedY=clf.predict(new.reshape(-1,10))# 对新数据进行预测
print('predictedY:'+str(predictedY)) # 输出为predictedY:[1],表示愿意购买,1表示yes
原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451077.html