Python3的决策树应用及遇到的问题解决
2018-01-26 10:35
531 查看
**
根据列表训练集(用Excel存为.csv格式)
RID,age,income,student,credit_rating,Class_buys_computer
1,youth,high,no,fair,no
2,youth,high,no,excellent,no
3,middle_aged ,high,no,fair,yes
4,senior,medium,no,fair,yes
5,senior,low,yes,fair,yes
6,senior,low,yes,excellent,no
7,middle_aged ,low,yes,excellent,yes
8,youth,medium,no,fair,no
9,youth,low,yes,fair,yes
10,senior,medium,yes,fair,yes
11,youth,medium,yes,excellent,yes
12,middle_aged ,medium,no,excellent,yes
13,middle_aged ,high,yes,fair,yes
14,senior,medium,no,excellent,no
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/0d2fc0bbe5c507f9fbbb0a630d627038)
2、将特征值列表和Class列表转换为(0,1)形式
3、运用决策树分类
4、使模型可视化
5、利用测试集进行预测测试
附源码:
如果出现下图情况,第一列数据乱码,那就是你存为.csv文件时候的选择错了
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/1722c8a054c6d9da0328188ac1b8edff)
应该选择如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/c45a6d06901322505ee802187991bbdc)
下图所示选择会出现乱码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/d9c8c86b59bdac591ab0e1813a812ffa)
2、中文注释乱码情况:需要更改编码方式点击projiect->Properties选择如图所示编码方式即可:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/10dd3a0f45e3b050d9ccd866fff6e858)
3、如果出现这样的错误提示:AttributeError: ‘_csv.reader’ object has no attribute ‘next’
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/53dffcd8728757efa11b12aebe8f8e38)
需要更改headers = reader.next() 为headers = next(reader)即可,这应该是Python3和Python2的区别,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/79259fbc54755a43e0118d9a120fb8f3)
4、模型可视化时.dot文件转化为graphviz注意的问题
在cmd命令中输入dot -Tpdf iris.dot -o output.pdf
(1) 注意iris.dot为你的.dot文件所在路径
(2)输出文件路径为cmd命令行前面的路径
5、测试集预测出现的问题:
array=[ 1. 0. 0. 0. 1. 1. 0. 0. 1. 0.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/ece0c26dca1a1aa0ae21243202c78362)
解决办法:这是因为数据集newRowX数组矩阵需要加个中括号[ ]如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/ddb3fc9de656a2f2906ab1e84f75b79c)
最后上一张运行成功截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/e0a8128f09595e6456260e9c3ec340dd)
2018年1月26日于斛兵塘
Python3的决策树应用及遇到的问题解决
**根据列表训练集(用Excel存为.csv格式)
RID,age,income,student,credit_rating,Class_buys_computer
1,youth,high,no,fair,no
2,youth,high,no,excellent,no
3,middle_aged ,high,no,fair,yes
4,senior,medium,no,fair,yes
5,senior,low,yes,fair,yes
6,senior,low,yes,excellent,no
7,middle_aged ,low,yes,excellent,yes
8,youth,medium,no,fair,no
9,youth,low,yes,fair,yes
10,senior,medium,yes,fair,yes
11,youth,medium,yes,excellent,yes
12,middle_aged ,medium,no,excellent,yes
13,middle_aged ,high,yes,fair,yes
14,senior,medium,no,excellent,no
一、步骤:
1、将以上列表存为.csv格式文件,读取特征值列表和Class列表2、将特征值列表和Class列表转换为(0,1)形式
3、运用决策树分类
4、使模型可视化
5、利用测试集进行预测测试
附源码:
from sklearn.feature_extraction import DictVectorizer import csv from sklearn import preprocessing from sklearn import tree from sklearn.externals.six import StringIO #Read in the csv file put features in a list of dict and list of class label allElectronicsData = open(r'C:\Users\wqs\Desktop\1.csv','rt') #路径前的'r'相当于转义 reader = csv.reader(allElectronicsData) #按行读取 headers = next(reader) print(headers) featureList = [] #特征值列表 labelList = [] #最后一列(Class列表) for row in reader: labelList.append(row[len(row) - 1]) #每一行Length固定为6,row[5]即最后一列值,遍历每一行取出最后一列值放入labelList rowDict = {} # print(labelList) for i in range(1,len(row) - 1): #for i in range(1,5):1,2,3,4 # print(row[i]) rowDict[headers[i]] = row[i] #将此行的每个特征值取出给表头的每个headers # print("rowdict:",rowDict) featureList.append(rowDict) print(featureList) #Vectorize features 将特征列表转化为字符型的dummy v vec = DictVectorizer() #实例化 dummyX = vec.fit_transform(featureList).toarray() print("dummyX:",str(dummyX)) print(vec.get_feature_names()) print("labelList:",labelList) #vectorize class labels 将Class转化为dummyY lb = preprocessing.LabelBinarizer() #实例化 dummyY = lb.fit_transform(labelList) print("dummyY:",dummyY) #using decision tree for classification(运用决策树分类) clf = tree.DecisionTreeClassifier(criterion = 'entropy') clf.fit(dummyX,dummyY) print("clf:",str(clf)) #Visulize model 使模型可视化 with open("allElectronicInformationGainOri.dot", 'w') as f: f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f) #测试集 # predict a new row oneRowX = dummyX[0, :] print("oneRowX: " + str(oneRowX)) newRowX = oneRowX newRowX[0] = 1 newRowX[2] = 0 print("newRowX: " + str(newRowX)) predictedY = clf.predict([newRowX]) print("predictedY: " + str(predictedY))
二、遇到的问题及解决办法
1、打开.csv文件出错的情况及解决办法如果出现下图情况,第一列数据乱码,那就是你存为.csv文件时候的选择错了
应该选择如图所示:
下图所示选择会出现乱码:
2、中文注释乱码情况:需要更改编码方式点击projiect->Properties选择如图所示编码方式即可:
3、如果出现这样的错误提示:AttributeError: ‘_csv.reader’ object has no attribute ‘next’
需要更改headers = reader.next() 为headers = next(reader)即可,这应该是Python3和Python2的区别,如下图所示:
4、模型可视化时.dot文件转化为graphviz注意的问题
在cmd命令中输入dot -Tpdf iris.dot -o output.pdf
(1) 注意iris.dot为你的.dot文件所在路径
(2)输出文件路径为cmd命令行前面的路径
5、测试集预测出现的问题:
array=[ 1. 0. 0. 0. 1. 1. 0. 0. 1. 0.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
如图所示:
解决办法:这是因为数据集newRowX数组矩阵需要加个中括号[ ]如图所示:
最后上一张运行成功截图:
2018年1月26日于斛兵塘
相关文章推荐
- 【极客学院】-python学习笔记-3-单线程爬虫 (request安装遇到问题及解决,应用requests提取信息)
- Python2.5使用新浪微博Python SDK遇到的问题与解决方法
- 安装python-mysql遇到的问题解决方法
- RS485串行总线可靠性的研究 关于RS485工程应用可能遇到的问题及其解决思路
- [原]用Eclipse开发Android应用,用svn管理源码时遇到的问题及解决方法
- Kettle 在应用中遇到的一些问题和解决方法
- asp.net ajax应用中遇到的两个问题及解决方法
- C嵌入PyThon遇到问题解决方法
- PYTHON -MYSQLDB安装遇到的问题和解决办法
- python中cx_Oracle模块安装遇到的问题与解决方法
- 最近做了一个iOS小应用,记录下遇到的问题以及解决方法
- 用python编写ASP脚本时遇到的问题,初步的解决方法,目前正在寻找更好的解决办法。
- python中cx_Oracle模块安装遇到的问题与解决方法
- 提交应用遇到"Missing Screenshot"问题的解决方法
- sqlite3 jdbc、c接口、python接口处理中文时遇到的问题及其解决方法
- MeanShift代码-----应用中遇到的问题和解决+函数介绍
- 开发Windows商店应用时使用SmsDevice类API遇到的Access Denied问题解决方法
- python中cx_Oracle模块安装遇到的问题与解决方法
- python help dir stackoverflow docs google--遇到python问题怎么样解决
- Python Email应用的中文乱码问题解决方法