From 26c0ef9dfade9af6c7cdf29aef135f4c9bf26d3f Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Wed, 5 Feb 2025 15:43:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90--=E5=86=B3=E7=AD=96=E6=A0=91?= =?UTF-8?q?=E5=9B=9E=E5=BD=92=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- decision_tree_regression.py | 43 ++++++++++++++++++++++++++ docs/ml.md | 59 +++++++++++++++++++++++++++++++++++- output/decision_tree_r.png | Bin 0 -> 32602 bytes 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 decision_tree_regression.py create mode 100644 output/decision_tree_r.png diff --git a/decision_tree_regression.py b/decision_tree_regression.py new file mode 100644 index 0000000..f4e9afc --- /dev/null +++ b/decision_tree_regression.py @@ -0,0 +1,43 @@ +from sklearn.tree import DecisionTreeRegressor +from sklearn.model_selection import train_test_split +from sklearn.datasets import make_regression +import numpy as np +import matplotlib.pyplot as plt + +# 1. 创建回归数据集 +X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42) + +# 2. 划分训练集和测试集 +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + +# 3. 创建决策树回归模型 +regressor = DecisionTreeRegressor(random_state=42) + +# 4. 训练模型 +regressor.fit(X_train, y_train) + +# 5. 在测试集上进行预测 +y_pred = regressor.predict(X_test) + +# 6. 可视化结果 +plt.figure(figsize=(10,6)) +# 真实数据点 +plt.scatter(X_test, y_test, color='blue', label='true_label') +# 预测结果 +plt.scatter(X_test, y_pred, color='red', label='predict_label') +# 绘制回归曲线(此处对X进行排序,使曲线平滑) +X_grid = np.arange(min(X_test), max(X_test), 0.01).reshape(-1, 1) +y_grid = regressor.predict(X_grid) +plt.plot(X_grid, y_grid, color='green', label='regression_curve') +plt.title("decision_tree_regression") +plt.xlabel("x") +plt.ylabel("y") +plt.legend() +plt.savefig("./output/decision_tree_r.png") + +# 7. 打印模型性能(可选) +from sklearn.metrics import mean_squared_error, r2_score +mse = mean_squared_error(y_test, y_pred) +r2 = r2_score(y_test, y_pred) +print(f"均方误差(MSE): {mse:.2f}") +print(f"R^2 分数: {r2:.2f}") diff --git a/docs/ml.md b/docs/ml.md index db8438a..149f923 100644 --- a/docs/ml.md +++ b/docs/ml.md @@ -141,4 +141,61 @@ 缺点: 计算复杂度高:对于大规模数据集,训练时间较长。 参数选择敏感:核函数和参数的选择对模型性能影响较大。 - 解释性差:相比线性模型,SVM的解释性较差。 \ No newline at end of file + 解释性差:相比线性模型,SVM的解释性较差。 + +决策树:通过一系列条件判断(节点),将数据逐步分割成更小的子集,最终达到预测目标。其核心思想是递归地选择最佳特征进行数据划分,直到满足停止条件。 + 原理: + 决策树由根节点、内部节点和叶节点组成: + 根节点(Root Node):表示整个数据集,包含所有样本。 + 内部节点(Internal Nodes):对应于特征的划分,决定数据如何被进一步分割。 + 叶节点(Leaf Nodes):最终的分类或预测值。 + 特征选择标准: + 为了找到最佳的划分方式,需要计算某种指标来衡量特征的划分能力,主要有: + 信息增益(Information Gain, IG): + 适用于ID3算法。 + 衡量数据集划分前后的信息熵变化,信息增益越大,说明该特征越能有效区分数据。 + 信息熵公式: H(D)=−∑i=1npilog⁡2piH(D) = -\sum_{i=1}^{n} p_i \log_2 p_iH(D)=−i=1∑n​pi​log2​pi​ + 信息增益: IG(D,A)=H(D)−∑v∈A∣Dv∣∣D∣H(Dv)IG(D, A) = H(D) - \sum_{v \in A} \frac{|D_v|}{|D|} H(D_v)IG(D,A)=H(D)−v∈A∑​∣D∣∣Dv​∣​H(Dv​) + + 信息增益率(Gain Ratio): + 适用于C4.5算法。 + 解决信息增益偏向于多值特征的问题。 + 公式: GR(A)=IG(D,A)H(A)GR(A) = \frac{IG(D, A)}{H(A)}GR(A)=H(A)IG(D,A)​ + 其中 H(A)H(A)H(A) 是特征A的固有信息熵。 + 基尼指数(Gini Index): + 适用于CART算法(用于分类)。 + 计算类别的不纯度,基尼指数越小,说明数据的纯度越高。 + 公式: Gini(D)=1−∑i=1npi2Gini(D) = 1 - \sum_{i=1}^{n} p_i^2Gini(D)=1−i=1∑n​pi2​ + 均方误差(MSE, Mean Squared Error): + 适用于CART回归树(用于回归)。 + 通过最小化方差来进行划分。 + 决策树的剪枝: + 为了防止过拟合,通常会对决策树进行剪枝: + 预剪枝(Pre-pruning): + 在构造决策树的过程中,通过设定最大深度、最小样本数、信息增益阈值等,提前停止树的生长。 + 后剪枝(Post-pruning): + 先生成完整的决策树,再使用交叉验证或错误率评估对非必要的分支进行剪枝,去掉对泛化能力无贡献的部分。 + 适用场景: + 分类任务: + 电子商务用户行为预测(如判断用户是否会购买商品)。 + 信贷风险评估(如预测贷款是否会违约)。 + 医疗诊断(如判断病人是否患有某种疾病)。 + 回归任务: + 房价预测(如根据面积、地段预测房价)。 + 股票市场分析(如基于历史数据预测股票走势)。 + 特征选择: + 决策树的分裂过程可以用来评估特征的重要性,从而进行特征筛选。 + 异常检测: + 通过决策树模型分析数据的分布情况,检测异常值。 + 优缺点: + 优点: + 易解释:决策路径直观,适合可视化。 + 计算高效:训练时间一般较短,适用于大规模数据。 + 不需要数据归一化:对数值数据不需要标准化或归一化处理。 + 可以处理非线性关系:可以自动捕捉特征之间的非线性关系。 + 适用于缺失数据:决策树可以处理部分缺失数据,不需要填充。这个只是可能而已,刚好缺失的数据用不到... + 缺点: + 容易过拟合:如果不进行剪枝,决策树可能会过度拟合训练数据。 + 对噪声敏感:小的变化可能导致完全不同的树结构。 + 处理连续变量效果较差:对于连续变量,决策树的划分可能不够精细。 + 倾向于偏向于多值特征:信息增益可能会导致决策树偏向具有更多取值的特征。 \ No newline at end of file diff --git a/output/decision_tree_r.png b/output/decision_tree_r.png new file mode 100644 index 0000000000000000000000000000000000000000..938c83f689ce077d64628909882c68fe201765a4 GIT binary patch literal 32602 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