决策树算法

决策树应该算是机器学习算法中最简单的算法了,而且涉及的数学知识也不多,理解起来也就没有那么的困难。所以把决策树算法当作第一个学习的算法。

python基础算是没有吧,虽然看过两遍python入门到。。基本就是看了看前部分的变量函数,数组基础,机器学习中用到的python函数不是你看就能看的全的,所以打算边学机器学习边学python,如果说会什么时候专门去学python的话,也许就是机器学习学不下去了,去看下python放松心情。

好了,下面开始学习决策树算法。

想直接上代码。。,简单说几点吧,

  • 分类算法
  • 属性取值为离散型,不是离散的话,就给它分区域也得让它离散
  • 给一群人分类得话,最后的结果为是否可作为结婚对象,可以根据颜值和年龄,你是先按年龄分然后再按颜值,还是先按颜值再按年龄呢?当然是颜值,只要看得顺眼,年龄不是问题,而在决策树中,这个不是随随便便就选出来的,如果对一个人来说,十分介意年龄,不在意颜值,20岁以上就可以作为结婚对象,以下就不结婚,对颜值一点要求都没有,这个时候,你如果按年龄将这群人分为两类,那么你的分类的需求就达到了,这个时候我们说经过分类这堆人完全被分到相应的类别,信息纯度为最高,引入一个熵的概念,与信息纯度反比,这个时候信息熵为最大=1。换种情况,在根据年龄划分后,20岁以上的这堆人里颜值分低于60分的不能作为结婚对象,那么这个时候分类后的信息纯度就没有达到最高,因为它不仅仅存在一种类别,,这个时候,我们就需要用信息熵来衡量他的分类效果,什么是好效果呢,怎么计算呢?

好了,讲清楚就直接代码吧

from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
import numpy as np

allElectronicsData = open(r'buy_compuetr.csv', 'r', encoding='UTF-8')
reader = csv.reader(allElectronicsData)
headers = ['ID', 'age', 'Income', 'student', 'credit_rating']
print(reader)
featureList = []
labelList = []
# 对离散分类数据进行类似one-hot编码
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)

# 转换属性行为one-hot编码
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print(dummyX)
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print(dummyY)
clf = tree.DecisionTreeClassifier(criterion='entropy')
# 创建分类器
clf.fit(dummyX, dummyY)
# 画出结果

with open("allElectronicInformationGainOri.dot", 'w')as f:
    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

    # 自定义测试
oneRowX = dummyX[0, :]
print(oneRowX)
newRowX = oneRowX
print(type(newRowX))
newRowX[0] = 1
newRowX[2] = 0
predictedY = clf.predict([newRowX])
print(str(predictedY))

csv文件:

之前写的一个空气质量分类的决策树,这里采用gini进行特征属性的选择,也可以在构造模型时给函数传参信息熵,数据样本数量比较多,而且后期后进行剪枝。

欢迎交流,入门中。。。

备注:今日份python小知识点

给数组转换维度

l1 = np.array([[1, 2], [3, 4], [5, 6]])
print('-----------------------')
print(str(l1.reshape(2, 3)))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值