【学习笔记】 陈强-机器学习-Python-Ch4 线性回归
【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归
【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv)
【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归
【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析
【学习笔记】 陈强-机器学习-Python-Ch8 朴素贝叶斯
【学习笔记】 陈强-机器学习-Python-Ch9 惩罚回归
【课后题练习】 陈强-机器学习-Python-Ch9 惩罚回归(student-mat.csv)
【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch10 KNN法
【学习笔记】 陈强-机器学习-Python-Ch11 决策树(Decision Tree)
本学习笔记 仅为以防自己忘记了,顺便分享给一起学习的网友们参考。如有不同意见/建议,可以友好讨论。
本学习笔记 所有的代码和数据都可以从 陈强老师的个人主页 上下载
参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021.
数学原理等 详见陈强老师的 PPT
参考了:
网友阡之尘埃的Python机器学习08——决策树算法
KNN未考虑响应变量 y 的信息,所以对于噪音变量并不稳健。→ 决策树 (decision tree)
决策树可视为“自适应近邻法”(adaptive nearest neighbor),在进行节点分裂时考虑了y的信息,不受噪音变量的影响,适用于高维数据。
如果将决策树用于分类问题,则称为分类树 (classification tree) 。
如果将决策树用于回归问题,则称为回归树(regression tree)。
本质上,二叉树将“特征空间” 进行 递归分割 ,每次总是沿着与某个特征变量 x j x_j xj轴平行 的方向进行切割 ,切成“ 矩形 ”或“超矩形” 区域 。
分类树是一种通过分割特征空间进行分类的分类器(classifier as partition)。
分类树的分裂准则:定义一个节点不纯度函数 (node impurity function) φ ( p j ) ≥ 0 φ(p_j)≥0 φ(pj)≥0。
实践中常用的两个不纯度函数:“基尼指数”与“信息熵”。
使用波士顿房价数据boston (参考【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 )
import pandas as pd
import numpy as np
# 从原始来源加载数据
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep=r"\s+", skiprows=22, header=None)
# 处理数据
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
# 创建DataFrame
columns = [
"CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX",
"PTRATIO", "B", "LSTAT"
]
df = pd.DataFrame(data, columns=columns)
df['MEDV'] = target
# 确定特征
X = df.drop(columns=['MEDV'])
y = df['MEDV']
# 将数据分割为训练集(70%)和测试集(30%)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0)
X_train.shape, X_test.shape, y_train.shape, y_test.shape #显示了特征矩阵和目标向量的形状。
结果输出: ((354, 13), (152, 13), (354,), (152,))
#进行回归树估计
from sklearn.tree import DecisionTreeRegressor,export_text
model = DecisionTreeRegressor(
max_depth=2, #最大深度为2:最多会有 3 层(根节点 + 2 层的分裂),每个内部节点最多有 2 个分支。
random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test) #拟合优度
结果输出: 0.622596538377147
笔记:DecisionTreeRegressor ()
DecisionTreeRegressor 是由 Scikit-learn 提供的一个决策树模型,用于解决回归问题。它的工作原理是通过学习数据中的规律,将数据集分割成越来越小的区块,直至每个区块(或叶节点)尽可能地包含具有相同或相似目标值的观测。
#基本语法和参数
from sklearn.tree import DecisionTreeRegressor
# 创建回归模型实例
model = DecisionTreeRegressor(
criterion='squared_error',
splitter='best',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.0,
ccp_alpha=0.0)
criterion: 衡量分裂质量的标准,通常有以下两种:
'squared_error': 最小化平方误差 (均方误差),这是默认值。
'friedman_mse': Friedman’s mean squared error,改进了均方误差的计算,可能会更适用于某些数据集。
'poisson': 适用于泊松回归,用于处理计数数据。
splitter: 决定分裂策略的算法,通常有:
'best': 选择最佳分裂。
'random': 选择随机分裂,适用于增加模型的多样性。
max_depth: 树的最大深度。如果 None