决策树算法
C4.5
C4.5 是一种用于生成决策树的算法,不再使用信息增益,而是使用信息增益比,来避免偏向于选择取值较多的特征。信息增益比是信息增益与特征的熵的比值。
ID3
D3 是一种基于信息增益(Information Gain)的决策树算法
Cart
CART(分类与回归树)一种决策树算法,,CART 使用 二叉树结构,即每个节点只能有两个子节点。
cart剪枝
CART 决策树的剪枝方法分为 预剪枝(Pre-pruning)和 后剪枝(Post-pruning)两种:
预剪枝:
预剪枝是在构建决策树时就决定是否停止进一步划分某个节点。主要通过以下标准来控制:
- 当某个节点的样本数小于某个阈值时,不再继续划分。
- 当某个节点的 Gini 不纯度小于某个阈值时,不再继续划分。
预剪枝的优点是能够减少计算量,但缺点是可能会导致模型不够复杂,从而产生欠拟合。
后剪枝:
后剪枝是在决策树完全构建出来之后,对树进行修剪。具体过程如下:
- 构建完整的决策树。
- 从叶子节点开始,逐渐向上遍历树的每个节点。
- 对每个节点进行判断,是否合适剪去该节点及其子树。如果剪去该子树后,模型的性能没有显著下降,就可以剪枝。
后剪枝通过避免过度拟合来提高模型的泛化能力,但其计算开销较大。
特征工程(特征提取)
- 字典特征提取
主要用于处理包含键值对(key-value pairs)的数据结构
1
2
3
4
5
6
7
8
9
10
11from sklearn.feature_extraction import DictVectorizer
# 字典特征提取
data = [
{'city': 'beijing', 'temperature': 100},
{'city': 'shanghai', 'temperature': 95},
{'city': 'guangzhou', 'temperature': 98}
]
transfer = DictVectorizer(sparse=False)
new_data = transfer.fit_transform(data)
print(transfer.feature_names_)
print(new_data) - 文本特征提取
主要用于将文本数据(如句子、段落、文章等)转换成数值型特征。这对于文本分类、信息检索等任务非常重要。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from sklearn.feature_extraction.text import CountVectorizer
# 示例文本数据
data = [
"I love programming",
"Python is great",
"I love machine learning"
]
# 创建 CountVectorizer 对象
transfer = CountVectorizer()
# 将文本数据转换为特征向量
new_data = transfer.fit_transform(data)
# 输出特征名称
print("Feature Names:", transfer.get_feature_names_out())
# 输出转换后的特征矩阵
print("Transformed Data:", new_data.toarray()) - 文本特征提取(中文文本)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21from sklearn.feature_extraction.text import CountVectorizer
import jieba
# 中文文本数据(大于20个字)
data = [
"我热爱编程,学习编程语言是一件非常有趣的事情,它能够提升我们解决问题的能力,编程让我变得更加有创意。",
"Python语言是一门非常强大的编程语言,具有简洁的语法和丰富的库,可以帮助开发者更高效地完成任务。",
"机器学习是一项非常有前途的技术,它能够让计算机从数据中自动学习,逐步提高模型的精确度,解决实际问题。"
]
# 使用jieba分词
text_list = []
for line in data:
text_list.append(" ".join(list(jieba.cut(line))))
# 创建 CountVectorizer 对象
transfer = CountVectorizer()
# 将文本数据转换为特征向量
new_data = transfer.fit_transform(text_list)
# 输出特征名称
print("Feature Names:", transfer.get_feature_names_out())
# 输出转换后的特征矩阵
print("Transformed Data:", new_data.toarray())
tf-idf
词频 * 逆文档频率
1 | # tfi-df |
回归决策树
1 | import numpy as np |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QuickReference!