安装包
使用python 模块scikit-learn
覆盖问题领域:
分类(classification), 回归(regression), 聚类(clustering), 降维(dimensionality reduction)
模型选择(model selection), 预处理(preprocessing)
实现代码
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import tree
from sklearn import preprocessing
#read
data = open('/home/usr/Desktop/dl/1/01DTree/AllElectronics.csv', 'r')
reader = csv.reader(data)
headers = next(reader)
print(headers) # 打印数据表头
features = []
labels = []
for row in reader:
labels.append(row[len(row)-1])
rowDict = {}
for i in range(1,len(row)-1):
rowDict[headers[i]] = row[i]
features.append(rowDict)
# 字典类型的特征和标签,字典类型是为了后面的转换方便
print(features)
print(labels)
#使用向量化类将特征向量化,对于决策树来说,其构建为二分树
# 例如对于变量age可以取三个值,分别为young ,mid,old那么对于age变量将会转变为对于三个变量的判断
# age=young? age=mid? age=old?。下面的向量化就是得到一个可以直接构建二分树的只有0和1的数据集
vec = DictVectorizer()
dummyX = vec.fit_transform(features).toarray()
print(dummyX)
print(vec.get_feature_names()) # 打印构建的向量的标题
# 标签向量化
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labels)
print(dummyY)
# 调用决策树构建函数训练决策树
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dummyX, dummyY)
print(str(clf))
# 打印决策树,安装graphiz工具可以将导出的决策树打印出来
with open('decisionTreeResult.dot','w') as f:
f = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file=f)
# 预测过程
oneRowX = dummyX[0, :]
print(str(oneRowX))
newRow = oneRowX
newRow[0] = 1
newRow[2] = 0
print(newRow)
predictY = clf.predict([newRow])
print(predictY)