zhouchuer
2024-11-01 21:58:49
没有看过上一期最好看看。本篇接着上次继续讲决策树。
决策树算法能够计算数据的信息熵,并根据信息熵的减少帮你得出一个分类预测的判断逻辑。
熵能够体现事件的不确定性:
第一类:分类模型(适合离散数据)。
c = DecisionTreeClassifier (criterion = 'entropy')
第二类:回归模型(适合连续数据)。
c = DecisionTreeRegressor (criterion = 'entropy')
决策树模型的训练、测验、预测方法和贝叶斯算法完全一致。即:
# 训练模型
c.fit(x_train, y_train)
# 测验模型
c.score(x_test, y_test)
# 分类预测
c.predict(t_word)
过拟合是决策树模型面临的常见问题,模型考虑过多因素时,容易导致过拟合。
一般来说,当模型出现训练结果很好,但测试结果很差的情况时,说明模型发生了过拟合。注意两个条件必须同时满足。
列举一个:
c.score(x_train, y_train) # 结果:0.9
c.score(x_test, y_test) # 结果:0.4
# 发生过拟合
想要解决程序的过拟合问题,我们可以限制决策树的宽度和高度。注意可以同时限制宽度和高度。
# 限制高度
c = DecisionTreeClassifier(criterion = 'entropy', max_depth = 高度)
# 限制宽度
c = DecisionTreeRegressor(max_leaf_nodes = 数量)
补充一个决策树可视化,不单独分框了。
# 绘制决策树
x = export_graphviz(c, out_file = 'tree.dot')
(graph, ) = pydot.graph_from_dot_file('tree.dot')
graph.write_png('tree.png')
画图有如下方法:
我们可以使用 seaborn
库中的 violinplot
函数绘制提琴图。
# 格式
sns.violinplot(x = 结果, y = 因素, data = 数据)
# 代码
sns.violinplot(x = 'Species', y = 'Sepal.Length', data=df)
为了更好的看清结果,在使用提琴图时我们可以交换
画好图之后,可以使用 show
函数展示图像。
plt.show()
# 画小提琴图用 seaborn 库
# 展示图像使用 matplotlib.pyplot 库
我们可以使用 matplotlib.pyplot
库中的 barh
函数绘制柱形图。
# 格式
plt.barh(y,x)
# 代码
plt.barh(df.columns[0:4],c.feature_importances_)
除了 barh
外,我们也可以使用 bar
函数,两者格式相同,但是
# 格式
plt.bar(x,y)
# 代码
plt.bar(df.columns[0:4],c.feature_importances_)
想要画出多张图,我们可以使用 matplotlib.pyplot
库中的 subplot
函数。
# 格式
plt.subplot(行数, 列数, 位置)
# 代码
plt.subplot(2, 2, 1)
subplot 的位置从
想要设置图像大小,可以使用 matplotlib.pyplot
库中的 figure
函数。
# 格式
plt.figure(figsize = 大小)
# 代码
plt.figure(figsize = (8, 8))
我们可以使用 sklearn
库中的 Binarizer
函数可以实现数据二值化处理。
# 格式
变量名 = Binarizer(threshold = 边界值)
# 代码
binary = Binarizer(threshold = 0)
threshold
参数可以控制转化的边界,边界值自身转化成
举例:
threshold = 2
表格: | 转化前 | 转化后 |
---|---|---|
完成创建之后,还需要使用 fit_transform
对数据进行转化。
# 格式
数据 = 变量名.fit_transform(数据)
# 代码
df[['kills']] = binary.fit_transform (df[['kills']])
有时候,在人们统计、输入、整理数据的时候会遗漏、写错一些内容。这些被遗漏的内容被称作为异常值。其中由遗漏的空数据会被计算机识别成 Nan
。对于这种异常值,我们可以直接删除。
在程序中,NaN
表示不确定一个值到底是几,在这种情况下它和自己不相等。
# 格式
# dataframe 元素 != dataframe 元素
# 代码
if df[i][j] != df[i][j]:
# + 分支语句
下一期将介绍网页,敬请期待!