欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习-决策树

程序员文章站 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()