机器学习-决策树
程序员文章站
2024-02-16 13:08:04
...
决策树
决策树是什么
它是一种监督学习算法,主要用于分类问题,适用于可分类的、连续的输入和输出变量。
决策树是这样的一种树,这棵树的每个分支节点表示多个可以选择的选项,并且每个叶节点表示最终所做的决策。
决策树算法:ID3
ID3代表的是Iterative Dichotomizer 3。它的基本思想是,通过在给定集合中使用自上而下的贪婪搜索算法来构造决策树,以测试每个树节点处的每个属性。
听起来很简单 - 但是我们应该选择哪个节点来构建正确且最精确的决策树呢?我们该如何决定呢?好吧,有一些措施可以帮助我们作出最佳选择!
循环:
A — > 最好的属性;
将A分配给每个节点的决策属性;
对于A的每个值,创建一个字节点;
将训练示例排序
如果 示例被很好地分类:
停止;
否则:
继续迭代
信息增益
什么是最好的属性呢?那就是能带给我们最大信息增益的属性。从广义上讲,这是一种数学方法,它可以通过选择特定属性来获得我们想要的信息量。但它的真正意义是,基于已知的特定属性的值,数据集表格的随机性会逐渐减少。信息增益定义如下:
S = 训练集
A = 特定属性
|Sv| = Sv中元素的数量
|S| = S中元素的数量
v = 属性的所有可能值
熵
机器学习中的熵也具有与热力学力几乎相同的含义,如果是随机性度量的话。
v = 属性的所有可能值
步骤:
1、计算数据集的熵;
2、对于每个属性/ 特征:
(1)计算所有分类值的熵;
(2)取当前属性的平均信息熵;
(3)计算当前属性的增益;
3、选择最高增益属性;
4、重复,直到得到我们想要的树。
第1步:数据预处理
#导入相关库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
#将数据集拆分为训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
#特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
第2步:对测试集进行决策树分类拟合
from sklearn.tree import DecisionTreeClassifier
classifier = DicisionTreeClassifier(criterion = 'entropy', random_state = 0)
classifier.fit(X_train, y_train)
第3步:预测结果
y_pred = classifier.predict(X_test)
第4步:制作混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
第5步:可视化
from matplotlib.colors import ListedColormap
#将训练集结果进行可视化
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Decision Tree Classification (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
#将测试集结果进行可视化
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Decision Tree Classification (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
上一篇: 第一篇博客:WPF的学习
下一篇: Array数组方法