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

本文详细介绍了如何在Python环境中利用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:\Users\Lenovo\Desktop\AllElectronics.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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值