完成--决策树回归示例
This commit is contained in:
parent
fde5e675cf
commit
26c0ef9dfa
43
decision_tree_regression.py
Normal file
43
decision_tree_regression.py
Normal file
@ -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}")
|
||||
59
docs/ml.md
59
docs/ml.md
@ -141,4 +141,61 @@
|
||||
缺点:
|
||||
计算复杂度高:对于大规模数据集,训练时间较长。
|
||||
参数选择敏感:核函数和参数的选择对模型性能影响较大。
|
||||
解释性差:相比线性模型,SVM的解释性较差。
|
||||
解释性差:相比线性模型,SVM的解释性较差。
|
||||
|
||||
决策树:通过一系列条件判断(节点),将数据逐步分割成更小的子集,最终达到预测目标。其核心思想是递归地选择最佳特征进行数据划分,直到满足停止条件。
|
||||
原理:
|
||||
决策树由根节点、内部节点和叶节点组成:
|
||||
根节点(Root Node):表示整个数据集,包含所有样本。
|
||||
内部节点(Internal Nodes):对应于特征的划分,决定数据如何被进一步分割。
|
||||
叶节点(Leaf Nodes):最终的分类或预测值。
|
||||
特征选择标准:
|
||||
为了找到最佳的划分方式,需要计算某种指标来衡量特征的划分能力,主要有:
|
||||
信息增益(Information Gain, IG):
|
||||
适用于ID3算法。
|
||||
衡量数据集划分前后的信息熵变化,信息增益越大,说明该特征越能有效区分数据。
|
||||
信息熵公式: H(D)=−∑i=1npilog2piH(D) = -\sum_{i=1}^{n} p_i \log_2 p_iH(D)=−i=1∑npilog2pi
|
||||
信息增益: 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∑npi2
|
||||
均方误差(MSE, Mean Squared Error):
|
||||
适用于CART回归树(用于回归)。
|
||||
通过最小化方差来进行划分。
|
||||
决策树的剪枝:
|
||||
为了防止过拟合,通常会对决策树进行剪枝:
|
||||
预剪枝(Pre-pruning):
|
||||
在构造决策树的过程中,通过设定最大深度、最小样本数、信息增益阈值等,提前停止树的生长。
|
||||
后剪枝(Post-pruning):
|
||||
先生成完整的决策树,再使用交叉验证或错误率评估对非必要的分支进行剪枝,去掉对泛化能力无贡献的部分。
|
||||
适用场景:
|
||||
分类任务:
|
||||
电子商务用户行为预测(如判断用户是否会购买商品)。
|
||||
信贷风险评估(如预测贷款是否会违约)。
|
||||
医疗诊断(如判断病人是否患有某种疾病)。
|
||||
回归任务:
|
||||
房价预测(如根据面积、地段预测房价)。
|
||||
股票市场分析(如基于历史数据预测股票走势)。
|
||||
特征选择:
|
||||
决策树的分裂过程可以用来评估特征的重要性,从而进行特征筛选。
|
||||
异常检测:
|
||||
通过决策树模型分析数据的分布情况,检测异常值。
|
||||
优缺点:
|
||||
优点:
|
||||
易解释:决策路径直观,适合可视化。
|
||||
计算高效:训练时间一般较短,适用于大规模数据。
|
||||
不需要数据归一化:对数值数据不需要标准化或归一化处理。
|
||||
可以处理非线性关系:可以自动捕捉特征之间的非线性关系。
|
||||
适用于缺失数据:决策树可以处理部分缺失数据,不需要填充。这个只是可能而已,刚好缺失的数据用不到...
|
||||
缺点:
|
||||
容易过拟合:如果不进行剪枝,决策树可能会过度拟合训练数据。
|
||||
对噪声敏感:小的变化可能导致完全不同的树结构。
|
||||
处理连续变量效果较差:对于连续变量,决策树的划分可能不够精细。
|
||||
倾向于偏向于多值特征:信息增益可能会导致决策树偏向具有更多取值的特征。
|
||||
BIN
output/decision_tree_r.png
Normal file
BIN
output/decision_tree_r.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Loading…
Reference in New Issue
Block a user