机器学习实战之使用 scikit-learn 库实现决策树

数据如图所示:
这里写图片描述

1、数值转换:

构造决策树之前,需要将数据转化成数值形式,对了类别 label,yes 和 no 分别为 1, 0;对了样本数据,比如第一行属性 age,它有 youth middle_aged 和 senior 三类,那么我们可以把 youth 写成 [1,0,0],middle_aged 写成 [0,1,0]的向量形式。python 提供了专门转换属性值为数值向量的方法:vec.fit_transform(featureList) .toarray(),也提供了转换 label 为数值的方法:lb.fit_transform(labelList)

2、构造决策树

直接调用现有的包,tree.DecisionTreeClassifier(criterion=’entropy’),criterion=’entropy’ 说明是使用信息增益进行特征选择,也就是使用 ID3 算法,当然可以根据自己需要选择不同的算法。

3、测试

使用训练好的决策树进行预测,直接使用现有的方法即可: clf.predict(newRowX.reshape(1,-1)) ,其中 newRowX 就是新的特征数据。

具体代码如下:

#!/bin/python
#coding=utf-8
#使用 sklearn 实现决策树
#要先将数据转化成决策树所能处理的

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

# Read in the csv file and put features into list of dict and list of class label
allElectronicsData = open(r'/personal/code/python/ML_maizi/decision_tree/AllElectronics.csv', 'rb')
reader = csv.reader(allElectronicsData)
headers = reader.next()

print(headers)

featureList = []
labelList = []

for row in reader:
    labelList.append(row[len(row)-1])
    rowDict = {}
    for i in range(1, len(row)-1):
        rowDict[headers[i]] = row[i]
    featureList.append(rowDict)

print(featureList)

# Vetorize features
# python 可以将 feature 转换成数据
vec = DictVectorizer()  #实例化
dummyX = vec.fit_transform(featureList) .toarray()

# vectorize class labels
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY: " + str(dummyY))

# Using decision tree for classification
# clf = tree.DecisionTreeClassifier()
# 使用 id3 算法
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dummyX, dummyY)

oneRowX = dummyX[0, :]
print("oneRowX: " + str(oneRowX))
# 新数据用于预测-测试集
newRowX = oneRowX
newRowX[0] = 1
newRowX[2] = 0
print("newRowX: " + str(newRowX))

#测试
predictedY = clf.predict(newRowX.reshape(1,-1))
#输出预测结果
print("predictedY: " + str(predictedY))


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值