决策树模型的基本原理

决策树模型简介

决策树模型的建树依据

决策树模型的代码实现

决策树模型既可以做分类分析(即预测分类变量值),也可以做回归分析(即预测连续变量值),分别对应的模型为分类决策树模型(DecisionTreeClassifier)及回归决策树模型(DecisionTreeRegressor)。

1. 分类决策树模型(DecisionTreeClassifier)

from sklearn.tree import DecisionTreeClassifier
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 0, 0, 1, 1]model = DecisionTreeClassifier(random_state=0)
model.fit(X, y)print(model.predict([[5, 5]]))
[0]

如果要同时预测多个数据,则可以写成如下形式:

print(model.predict([[5, 5], [7, 7], [9, 9]]))
[0 0 1]

补充知识点:决策树可视化(供感兴趣的读者参考)

通过graphviz插件进行决策树可视化,graphviz插件的使用教程可以查看该文档:https://shimo.im/docs/Dcgw8H6WxgWrc8hq/

# 1.如果不用显示中文,那么通过如下代码即可。安装graphviz稍微有些麻烦,可以参考上面的参考链接。
from sklearn.tree import export_graphviz
import graphvizimport os  # 以下两行是环境变量配置,运行一次即可,相关知识点可以参考5.2.3节
os.environ['PATH'] = os.pathsep + r'C:\Program Files (x86)\Graphviz2.38\bin'dot_data = export_graphviz(model, out_file=None, class_names=['0', '1'])
graph = graphviz.Source(dot_data)
graph  # 通过graph.render('决策树可视化')可在代码所在文件夹生成决策树可视化PDF文件


补充知识点:random_state参数的作用解释

from sklearn.tree import DecisionTreeClassifier
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 0, 0, 1, 1]model = DecisionTreeClassifier()  # 不设置random_state参数
model.fit(X, y)# 生成可视化结果
dot_data = export_graphviz(model, out_file=None, class_names=['0', '1'])
graph = graphviz.Source(dot_data)
graph


from sklearn.tree import DecisionTreeClassifier
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 0, 0, 1, 1]model = DecisionTreeClassifier()  # 不设置random_state参数
model.fit(X, y)# 生成可视化结果
dot_data = export_graphviz(model, out_file=None, class_names=['0', '1'])
graph = graphviz.Source(dot_data)
graph

可以看到它们的节点划分方式是不同的,这样会导致同样的数据的预测结果有所不同,例如数据[7, 7]在左边的决策树中会被预测为类别0,而在右边的决策树中会被预测为类别1。

此时有的读者就会有疑问了,为什么模型训练后会产生两颗不同的树呢,哪棵树是正确的呢?其实两颗树都是正确的,出现这种情况的原因,是因为根据“X[1]<=7”或者“X[0]<=6”进行节点划分时产生的基尼系数下降是一样的(都是0.48 - (0.60.444 + 0.40) = 0.2136),所以无论以哪种形式进行节点划分都是合理的。产生这一现象的原因大程度是因为数据量较少所以容易产生不同划分方式产生的基尼系数下降是一样的情况,当数据量较大时出现该现象的几率则较小。

总的来说,对于同一个模型,不同的划分方式可能会导致最后的预测结果会有所不同,设置random_state参数(可以设置成0,也可以设置成1或123等任意数字)则能保证每次的划分方式都是一致的,使得每次运行的结果相同。这个概念对于初学者来说还是挺重要的,因为初学者往往会发现怎么每次运行同一个模型出来的结果都不一样,从而一头雾水,如果出现这种情况,那么设置一下random_state参数即可。

2. 回归决策树模型(DecisionTreeRegressor)

from sklearn.tree import DecisionTreeRegressor
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 2, 3, 4, 5]model = DecisionTreeRegressor(max_depth=2, random_state=0)
model.fit(X, y)print(model.predict([[9, 9]]))
[4.5]
# 生成可视化结果
dot_data = export_graphviz(model, out_file=None)  # 回归决策树就没有class分类参数了
graph = graphviz.Source(dot_data)
graph



案例实战:员工离职预测模型搭建

模型搭建

1. 数据读取与预处理

首先读取员工信息以及其交易离职表现,即是否离职记录,代码如下:

import pandas as pd
df = pd.read_excel('员工离职预测模型.xlsx')
df.head()
工资 满意度 考核得分 工程数量 月工时 工龄 离职
0 3.8 0.53 2 157 3 1
1 8.0 0.86 5 262 6 1
2 1.1 0.88 7 272 4 1
3 7.2 0.87 5 223 5 1
4 3.7 0.52 2 159 3 1

处理文本内容,代码如下:

df = df.replace({'工资': {'低': 0, '中': 1, '高': 2}})
df.head()
工资 满意度 考核得分 工程数量 月工时 工龄 离职
0 0 3.8 0.53 2 157 3 1
1 1 8.0 0.86 5 262 6 1
2 1 1.1 0.88 7 272 4 1
3 0 7.2 0.87 5 223 5 1
4 0 3.7 0.52 2 159 3 1

2. 提取特征变量和目标变量

X = df.drop(columns='离职')
y = df['离职']

3. 划分训练集和测试集

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=123)
X_train
工资 满意度 考核得分 工程数量 月工时 工龄
3553 0 7.3 0.93 5 162 4
2112 0 4.3 0.52 2 160 3
1794 0 3.8 0.51 2 159 3
13886 0 6.3 0.71 4 244 2
11251 1 8.8 0.71 5 219 2
... ... ... ... ... ... ...
5218 1 6.3 0.80 4 256 4
12252 0 9.2 0.76 5 132 3
1346 0 7.3 0.95 4 223 6
11646 1 8.5 0.76 3 197 5
3582 1 5.6 0.58 4 258 3

12000 rows × 6 columns

4. 模型训练及搭建

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3, random_state=123)
model.fit(X_train, y_train)
DecisionTreeClassifier(max_depth=3, random_state=123)

上述模型搭建代码汇总

# 1.读取数据与简单预处理
import pandas as pd
df = pd.read_excel('员工离职预测模型.xlsx')
df = df.replace({'工资': {'低': 0, '中': 1, '高': 2}})# 2.提取特征变量和目标变量
X = df.drop(columns='离职')
y = df['离职']   # 3.划分训练集和测试集
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=123)# 4.模型训练及搭建
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3, random_state=123)
model.fit(X_train, y_train)
DecisionTreeClassifier(max_depth=3, random_state=123)

模型预测及评估

1. 直接预测是否离职

y_pred = model.predict(X_test)
print(y_pred[0:100])
[0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 01 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 1 1 0 0 0]
# 通过构造DataFrame进行对比
a = pd.DataFrame()  # 创建一个空DataFrame
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
预测值 实际值
0 0 0
1 0 0
2 1 1
3 0 0
4 0 0
# 如果要查看整体的预测准确度,可以采用如下代码:
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
0.9573333333333334
# 或者用模型自带的score函数查看预测准确度
model.score(X_test, y_test)
0.9573333333333334

2. 预测不离职&离职概率

其实分类决策树模型本质预测的并不是准确的0或1的分类,而是预测其属于某一分类的概率,可以通过如下代码查看预测属于各个分类的概率:

y_pred_proba = model.predict_proba(X_test)
print(y_pred_proba[0:5])
[[0.98526077 0.01473923][0.98526077 0.01473923][0.28600613 0.71399387][0.98526077 0.01473923][0.92283214 0.07716786]]
b = pd.DataFrame(y_pred_proba, columns=['不离职概率', '离职概率'])
b.head()
不离职概率 离职概率
0 0.985261 0.014739
1 0.985261 0.014739
2 0.286006 0.713994
3 0.985261 0.014739
4 0.922832 0.077168

如果想查看离职概率,即查看y_pred_proba的第二列,可以采用如下代码,这个是二维数组选取列的方法,其中逗号前的“:”表示所有行,逗号后面的数字1则表示第二列,如果把数字1改成数字0,则提取第一列不离职概率。

y_pred_proba[:,1]
array([0.01473923, 0.01473923, 0.71399387, ..., 0.01473923, 0.94594595,0.01473923])

3. 模型预测效果评估

在Python实现上,通过4.3节讲过的代码就可以求出在不同阈值下的命中率(TPR)以及假警报率(FPR)的值,从而可以绘制ROC曲线。

from sklearn.metrics import roc_curve
fpr, tpr, thres = roc_curve(y_test, y_pred_proba[:,1])

通过5.3节相关代码可以查看不同阈值下的假警报率和命中率,代码如下:

a = pd.DataFrame()  # 创建一个空DataFrame
a['阈值'] = list(thres)
a['假警报率'] = list(fpr)
a['命中率'] = list(tpr)
a
阈值 假警报率 命中率
0 2.000000 0.000000 0.000000
1 1.000000 0.000000 0.247110
2 0.945946 0.008232 0.677746
3 0.713994 0.038128 0.942197
4 0.077168 0.159879 0.969653
5 0.059406 0.171577 0.972543
6 0.045763 0.240035 0.976879
7 0.014739 1.000000 1.000000

已知了不同阈值下的假警报率和命中率,可通过matplotlib库可绘制ROC曲线,代码如下:

%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(fpr, tpr)
plt.show()

通过如下代码则可以快速求出模型的AUC值:

from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_test, y_pred_proba[:,1])
print(score)
0.9736722483245008

4. 特征重要性评估

model.feature_importances_
array([0.        , 0.59810862, 0.14007392, 0.10638659, 0.00456495,0.15086592])
# 通过DataFrame进行展示,并根据重要性进行倒序排列
features = X.columns  # 获取特征名称
importances = model.feature_importances_  # 获取特征重要性# 通过二维表格形式显示
importances_df = pd.DataFrame()
importances_df['特征名称'] = features
importances_df['特征重要性'] = importances
importances_df.sort_values('特征重要性', ascending=False)
特征名称 特征重要性
1 满意度 0.598109
5 工龄 0.150866
2 考核得分 0.140074
3 工程数量 0.106387
4 月工时 0.004565
0 工资 0.000000

决策树模型可视化呈现及决策树要点理解

通过graphviz插件进行决策树可视化,graphviz插件的更详细的使用教程可以查看该文档:https://shimo.im/docs/Dcgw8H6WxgWrc8hq/

# 1.如果不用显示中文,那么通过如下代码即可:
# !pip3 install pygraphviz
from sklearn.tree import export_graphviz
import graphviz
import os  # 以下这两行是手动进行环境变量配置,防止在本机环境的变量部署失败
os.environ['PATH'] = os.pathsep + r'C:\Program Files (x86)\Graphviz2.38\bin'dot_data = export_graphviz(model, out_file=None, class_names=['0', '1'])
graph = graphviz.Source(dot_data)graph.render("result")  # 导出成PDF文件
print('可视化文件result.pdf已经保存在代码所在文件夹!')
可视化文件result.pdf已经保存在代码所在文件夹!
graph  # 在Jupyter Notebook中可以直接输入变量名查看可视化图片


# 添加名称(feature_names)和填充颜色(filled=True)
dot_data = export_graphviz(model, out_file=None, feature_names=['income', 'satisfication', 'score', 'project_num', 'hours', 'year'], class_names=['0', '1'], filled=True)
graph = graphviz.Source(dot_data)graph

# 2.如果想显示中文,需要使用如下代码
from sklearn.tree import export_graphviz
import graphviz
import os  # 以下这两行是手动进行环境变量配置,防止在本机环境的变量部署失败
os.environ['PATH'] = os.pathsep + r'C:\Program Files (x86)\Graphviz2.38\bin'# 生成dot_data
dot_data = export_graphviz(model, out_file=None, feature_names=X_train.columns, class_names=['不离职', '离职'], rounded=True, filled=True)# 将生成的dot_data内容导入到txt文件中
f = open('dot_data.txt', 'w')
f.write(dot_data)
f.close()# 修改字体设置,避免中文乱码!
import re
f_old = open('dot_data.txt', 'r')
f_new = open('dot_data_new.txt', 'w', encoding='utf-8')
for line in f_old:if 'fontname' in line:font_re = 'fontname=(.*?)]'old_font = re.findall(font_re, line)[0]line = line.replace(old_font, 'SimHei')f_new.write(line)
f_old.close()
f_new.close()# 以PNG的图片形式存储生成的可视化文件
os.system('dot -Tpng dot_data_new.txt -o 决策树模型.png')
print('决策树模型.png已经保存在代码所在文件夹!')# 以PDF的形式存储生成的可视化文件
os.system('dot -Tpdf dot_data_new.txt -o 决策树模型.pdf')
print('决策树模型.pdf已经保存在代码所在文件夹!')
决策树模型.png已经保存在代码所在文件夹!
决策树模型.pdf已经保存在代码所在文件夹!

此时可以在代码所在文件夹中查看生成的可视化文件

参数调优: K折交叉验证与GridSearch网格搜索

前情提要 - 5.2节的模型搭建代码

# 1.读取数据与简单预处理
import pandas as pd
df = pd.read_excel('员工离职预测模型.xlsx')
df = df.replace({'工资': {'低': 0, '中': 1, '高': 2}})# 2.提取特征变量和目标变量
X = df.drop(columns='离职')
y = df['离职']# 3.划分训练集和测试集
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=123)# 4.模型训练及搭建
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3, random_state=123)
model.fit(X_train, y_train)
DecisionTreeClassifier(max_depth=3, random_state=123)

K折交叉验证

from sklearn.model_selection import cross_val_score
acc = cross_val_score(model, X, y, cv=5)
acc
array([0.96666667, 0.96066667, 0.959     , 0.96233333, 0.91366667])
acc.mean()
0.9524666666666667
from sklearn.model_selection import cross_val_score
acc = cross_val_score(model, X, y, scoring='roc_auc', cv=5)
acc
array([0.97146884, 0.9674637 , 0.96641351, 0.97047305, 0.95030156])
acc.mean()
0.9652241309284616

GridSearch网格搜索

1. 单参数的参数调优

from sklearn.model_selection import GridSearchCV  # 网格搜索合适的超参数# 指定参数k的范围
parameters = {'max_depth': [3, 5, 7, 9, 11]}
# 构建决策树分类器
model = DecisionTreeClassifier()  # 这里因为要进行参数调优,所以不需要传入固定的参数了# 网格搜索
grid_search = GridSearchCV(model, parameters, scoring='roc_auc', cv=5)   # cv=5表示交叉验证5次,默认值为3;scoring='roc_auc'表示通过ROC曲线的AUC值来进行评分,默认通过准确度评分
grid_search.fit(X_train, y_train)# 输出参数的最优值
grid_search.best_params_
{'max_depth': 7}
# 通过取消如下代码的注释可以查看GridSearchCV函数的官方介绍
# GridSearchCV?

补充知识点:批量生成调参所需数据

import numpy as np
parameters = {'max_depth': np.arange(1, 10, 2)}

2.参数调优的效果检验

根据max_depth=7来重新搭建模型,并进行检测

(1) 查看新模型准确度

# 根据max_depth=7来重新搭建模型
model = DecisionTreeClassifier(max_depth=7)  # 这个max_depth参数是可以调节的,之后讲
model.fit(X_train, y_train) # 查看整体预测准确度
y_pred = model.predict(X_test)
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
0.982

原来准确度评分score为0.957,现在为0.982,的确有所提升

(2) 查看新模型的ROC曲线和AUC值

# 查看新的AUC值
# 预测不违约&违约概率
y_pred_proba = model.predict_proba(X_test)
y_pred_proba[:,1]  # 如果想单纯的查看违约概率,即查看y_pred_proba的第二列# 绘制ROC曲线,计算AUC值
from sklearn.metrics import roc_curve
fpr, tpr, thres = roc_curve(y_test, y_pred_proba[:,1])# 绘制ROC曲线
import matplotlib.pyplot as plt
plt.plot(fpr, tpr)
plt.show()
<Figure size 640x480 with 1 Axes>
# 计算AUC值
from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_test, y_pred_proba[:,1])
print(score)
0.9877953411606777

总结:原来获得的AUC值为0.9736,现在获得的AUC值为0.9877,的确提高了模型的预测水平

补充知识点: 决策树深度增加时特征重要性的改变

# 查看此时的变量重要性
model.feature_importances_
array([0.00059222, 0.52656655, 0.13201648, 0.1116004 , 0.07759157,0.15163278])
# 一一对应
features = X.columns
importances = model.feature_importances_# 通过表格形式显示
importances_df = pd.DataFrame()  # 创建空二维表格,为之后准备
importances_df['特征名称'] = features
importances_df['特征重要性'] = importancesimportances_df.sort_values('特征重要性', ascending=False)
特征名称 特征重要性
1 满意度 0.526567
5 工龄 0.151633
2 考核得分 0.132016
3 工程数量 0.111600
4 月工时 0.077592
0 工资 0.000592

决策树模型还有些别的超参数,如下所示:

下面是分类决策树模型DecisionTreeClassifier()模型常用的一些超参数及它们的解释:

  1. criterion:特征选择标准,取值为"entropy"信息熵和"gini"基尼系数,默认选择"gini"。
  2. splitter:取值为"best"和"random","best"在特征的所有划分点中找出最优的划分点,适合样本量不大的情况,“random"随机地在部分划分点中找局部最优的划分点,适合样本量非常大的情况,默认选择"best”。
  3. max_depth:决策树最大深度,取值为int或None,一般数据或特征比较少的时候可以不设置,如果数据或特征比较多时,可以设置最大深度进行限制。默认取‘None’。
  4. min_samples_split:子节点往下划分所需的最小样本数,默认取2,如果子节点中的样本数小于该值则停止分裂。
  5. min_samples_leaf:叶子节点的最少样本数,默认取1,如果小于该数值,该叶子节点会和兄弟节点一起被剪枝(即剔除该叶子节点和其兄弟节点,并停止分裂)。
  6. min_weight_fraction_leaf:叶子节点最小的样本权重和,默认取0,即不考虑权重问题,如果小于该数值,该叶子节点会和兄弟节点一起被剪枝(即剔除该叶子节点和其兄弟节点,并停止分裂)。如果较多样本有缺失值或者样本的分布类别偏差很大,则需考虑样本权重问题。
  7. max_features:在划分节点时所考虑的特征值数量的最大值,默认取None,可以传入int型或float型数据。如果是float型数据,表示百分数。
  8. max_leaf_nodes:最大叶子节点数,默认取None,可以传入int型数据。
  9. class_weight:指定类别权重,默认取None,可以取"balanced",代表样本量少的类别所对应的样本权重更高,也可以传入字典指定权重。该参数主要是为防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。除了此处指定class_weight,还可以使用过采样和欠采样的方法处理样本类别不平衡的问题,过采样和欠采样将在第十一章:数据预处理讲解。
  10. random_state:当数据量较大,或特征变量较多时,可能在某个节点划分时,会碰上两个特征变量的信息熵增益或者基尼系数减少量是一样的情况,那么此时决策树模型默认是随机从中选一个特征变量进行划分,这样可能会导致每次运行程序后生成的决策树不太一致。如果设定random_state参数(如设置为123)可以保证每次运行代码时,各个节点的分裂结果都是一致的,这在特征变量较多,树的深度较深的时候较为重要。

3. 多参数调优

from sklearn.model_selection import GridSearchCV# 指定决策树分类器中各个参数的范围
parameters = {'max_depth': [5, 7, 9, 11, 13], 'criterion':['gini', 'entropy'], 'min_samples_split':[5, 7, 9, 11, 13, 15]}
# 构建决策树分类器
model = DecisionTreeClassifier()  # 这里因为要进行参数调优,所以不需要传入固定的参数了# 网格搜索
grid_search = GridSearchCV(model, parameters, scoring='roc_auc', cv=5)
grid_search.fit(X_train, y_train)# 获得参数的最优值
grid_search.best_params_
{'criterion': 'entropy', 'max_depth': 11, 'min_samples_split': 13}
# 根据多参数调优的结果来重新搭建模型
model = DecisionTreeClassifier(criterion='entropy', max_depth=11, min_samples_split=13)
model.fit(X_train, y_train) # 查看整体预测准确度
y_pred = model.predict(X_test)
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
0.9823333333333333
# 查看新的AUC值
# 预测不违约&违约概率
y_pred_proba = model.predict_proba(X_test)
y_pred_proba[:,1]  # 如果想单纯的查看违约概率,即查看y_pred_proba的第二列score = roc_auc_score(y_test, y_pred_proba[:,1])
print(score)
0.9890907850051593

总结:这里多参数调优后发现,模型效果的确有所优化

注意点1:多参数调优和分别单参数调优的区别

多参数调优和单参数分别调优是有区别的,比如有的读者为了省事,对上面的3个参数进行3次单独的单参数调优,然后将结果汇总,这样的做法其实是不严谨的。因为在进行单参数调优的时候,是默认其他参数取默认值的,那么该参数和其他参数都不取默认值的情况就没有考虑进来,也即忽略了多个参数对模型的组合影响。以上面的代码示例来说,使用多参数调优时,它是526=60种组合可能,而如果是进行3次单参数调优,则只是5+2+6=13种组合可能。
因此,如果只需要调节一个参数,那么可以使用单参数调优,如果需要调节多个参数,则推荐使用多参数调优。

注意点2:参数取值是给定范围的边界

另外一点需要需要注意的是,如果使用GridSearchCV()方法所得到的参数取值是给定范围的边界,那么有可能存在范围以外的取值使得模型效果更好,因此需要我们额外增加范围,继续调参。举例来说,倘若上述代码中获得的最佳max_depth值为设定的最大值13,那么实际真正合适的max_depth可能更大,此时便需要将搜索网格重新调整,如将max_depth的搜索范围变成[9, 11, 13, 15, 17],再重新参数调优。

【数据挖掘与商务智能决策】决策树模型相关推荐

  1. 【数据挖掘与商务智能决策】第十七章 神经网络

    前言 本人CSDN博客为"仿生程序员会梦见电子羊吗",本文基于markdown本文书写,平台及软件为CSDN与Typora,文中图片存储地址为CSDN,故部分图片可能带有" ...

  2. 【数据挖掘与商务智能决策】第一、二章 数据分析与三重工具

    前言 本人CSDN博客为"仿生程序员会梦见电子羊吗",本文基于markdown本文书写,平台及软件为CSDN与Typora,文中图片存储地址为CSDN,故部分图片可能带有" ...

  3. 【数据挖掘】决策树算法简介 ( 决策树模型 | 模型示例 | 决策树算法性能要求 | 递归创建决策树 | 树根属性选择 )

    文章目录 I . 决策树模型 II . 决策树模型 示例 III . 决策树算法列举 IV . 决策树算法 示例 V . 决策树算法性能要求 VI . 决策树模型创建 ( 递归创建决策树 ) VII ...

  4. Python 数据处理数据挖掘(六):决策树模型 之 CART算法

    声明:本文为学习笔记,侵权删 一.基尼系数&CART算法 CART(Classification And Regression Tree - 分类/回归树)是决策树算法的其中一种,依靠基尼系数 ...

  5. 数据挖掘十大算法之分类算法(决策树模型)

    文章目录 1. 决策树的概念 2. 构建决策树 3. 决策树中的信息论原理 3.1 信息量 3.2 熵 3.3 分类集合信息量 3.4 信息增益 接上篇文章分类介绍及评价指标我们讨论了分类算法中,分类 ...

  6. 数据挖掘与其商务智能上的应用的实验报告

    数据挖掘与其商务智能上的应用 内容摘要:数据挖掘是商务智能技术的重要组成部分,是一个新的重要的研究领域.本文介绍了商务智能技术应用现状和组成,数据挖掘的发展及现状分析,数据挖掘在现代商务智能上的应用, ...

  7. 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)

    文章目录 1 决策树模型简介 2 Gini系数(CART决策树) 3 信息熵.信息增益 4 决策树模型代码实现 4.1 分类决策树模型(DecisionTreeClassifier) 4.2 回归决策 ...

  8. 决策树模型算法研究与案例分析

    决策树模型算法研究与案例分析 (白宁超 2018年8月27日11: 42:33) 导读:决策树算法是一种基本的分类与回归方法,是最经常使用的算法之一.决策树模型呈树形结构,在分类问题中,表示基于特征对 ...

  9. 数据挖掘(三) 决策树

    数据挖掘(三) 决策树 1.决策树 概述 决策树(Decision Tree)算法是一种基本的分类与回归方法,是最经常使用的数据挖掘算法之一.我们这章节只讨论用于分类的决策树. 决策树模型呈树形结构, ...

最新文章

  1. 极限编程 (Extreme Programming) - 迭代计划 (Iterative Planning)
  2. 第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...
  3. slplunk原始数据和索引数据大小比较
  4. POJ1741 Tree(树分治——点分治)题解
  5. Performance comparison Raw device VS Ext2 VS Ext3 VS OCFS
  6. 【多线程】join()和detach()的用法
  7. php 阻塞消息队列,linux 消息队列阻塞
  8. MAX3232和MAX232的具体差别
  9. 重载操作符与转换(上)
  10. 机器阅读理解中文章和问题的深度学习表示方法
  11. 远程开发初探 - VS Code Remote Development
  12. String 字符串去除特殊字符和空格,正则表达式使用,%1$s
  13. matlab中平方根法,平方根法和改进的平方根法解线性方程组(Matlab程序)
  14. 网页websocket服务器端,node.js中ws模块创建服务端和客户端,网页WebSocket客户端
  15. leetCode:35. 搜索插入位置
  16. 关于在windows中配置flew,glfw
  17. 用科学数据求真:地月之间不可能电视直播
  18. java中的ioc和aop_IOC和AOP分别是什么?如何理解?
  19. java 输出二进制文件_Java输出小端二进制文件
  20. 利用matlab进行图片的二值化处理

热门文章

  1. Andorid自带ActionBar的用法解析
  2. 今日金融词汇---品牌护城河
  3. 简单理解深拷贝和浅拷贝的区别
  4. JavaScript走向成熟
  5. 小程序商店刷榜_微信小程序怎么通过“硬广”“软广”来运营引流?运营干货...
  6. #Paper Reading# Toward an Architecture for Never-Ending Language Learning
  7. 中国电子商务面临信用危机
  8. uniapp复制功能
  9. word如何转换成PDF转换器简单方法介绍
  10. 十二个鸡蛋三次找出坏鸡蛋