maoruibin / maoruibin.github.com

personal blog
http://gudong.site
MIT License
21 stars 5 forks source link

决策树 #71

Open maoruibin opened 6 years ago

maoruibin commented 6 years ago

决策树算法是机器学习算法中的一种分类算法,sklearn 包提供了相应的实现,接着用决策树算法来完成一个小练习。

练习目的

练习场景

现在需要编写一个模型用来判断一个水果是苹果还是橘子

训练数据

要得到模型,就必须要有训练数据也称作训练样本,然后利用训练数据的特征和标签进行训练,

样本数据集

为了简单,这里只关心水果的两个特征:重量(g)、光滑度, 序号 重量 光滑度 标签
1 140g 光滑 苹果
2 130g 光滑 苹果
3 160g 粗糙 橘子
4 155g 粗糙 橘子

以上便是一个样本集,这个集合里有四条训练样本,样本包含两个要素

其实,这个例子中关于标签的理解有点抽象,英文中特征是 'feature',标签是 'label' 针对于特定的样本,其实这里的样本的标签理解为结果可能更好理解。

在机器学习的世界里,所有的现实世界中的东西都是数据,要被训练的数据集合中每一个数据样本会有很多特征值,但是光有特征不行,在监督学习的范畴内,特征需要跟一个结果确定起来,这个样本才是一个完整的样本,这里的结果,也可以理解为根据样本属性值打标签。当然生活中标签的概念都是一种被动的行为,是后期人们打上去的,而这里是样本本来就有的东西。 Label

具体训练以及预测

有了样本数据集,就可以开始训练了,这里可以自己编写一个分类器,然后使用训练数据进行训练,然后最终得出一个模型,接着用这个模型进行数据预测。

而 sklearn 作为一个成熟的数据处理包,他已经实现了机器学习中大多数算法,其中就有分类算法决策树的实现 - DecisionTreeClassifier,使用时只需要导入对应的包即可。 训练好了模型,预测未知的数据就很简单了,代码如下

from sklearn import tree
# [重量,光滑度(1 光滑 0 粗糙]
# 样本数据  训练数据
features = [[140,1],[130,1],[150,0],[160,0]]
# 样本对应的标签
labels = ['apple','apple','orange','orange']

# 决策树分类
# 创建分类器
clf = tree.DecisionTreeClassifier()
# 使用样本进行训练
clf = clf.fit(features,labels)

# 利用已有模型预测数据
result = clf.predict([[180,1]])
print result

result is

['orange']