常见监督学习算法的原理与实践
立即解锁
发布时间: 2025-08-31 01:11:33 阅读量: 11 订阅数: 19 AIGC 

# 常见监督学习算法的原理与实践
## 1. 随机森林
### 1.1 超参数调优
通过调整 `featureSubsetStrategy` 和 `subsamplingRate` 参数,可以提高模型性能和训练速度。
- `featureSubsetStrategy` 取值:"auto", "all", "sqrt", "log2", "onethird"
- `subsamplingRate` 取值范围:0 到 1 之间的任意值,当值设为 1 时,使用整个数据集。
### 1.2 特征重要性计算
在随机森林中,特征重要性的计算方式与决策树类似,但有一个小的变化,即在归一化步骤之前计算变量特征重要性的平均值。公式如下:
\[average - f_i=\frac{number\ of\ trees\ with\ feature}{f_i}\]
所有变量的 `average - f_i` 用于计算最终的特征重要性 `final - f_i`。
### 1.3 PySpark 代码示例
#### 分类
```python
from pyspark.ml.classification import RandomForestClassifier
clf = RandomForestClassifier(featuresCol='features', labelCol='y')
clf_model = clf.fit(binary_df)
print(clf_model.featureImportances)
print(clf_model.toDebugString)
```
#### 回归
```python
from pyspark.ml.regression import RandomForestRegressor
reg = RandomForestRegressor(featuresCol='features', labelCol='balance')
reg_model = reg.fit(continuous_df)
print(reg_model.featureImportances)
print(reg_model.toDebugString)
```
### 1.4 为何使用随机森林
- 比单个决策树更健壮,能限制过拟合。
- 在每棵树的训练过程中随机选择特征,消除特征选择偏差。
- 使用邻近矩阵,可用于填充缺失值。
## 2. 梯度提升
### 2.1 原理
梯度提升树是决策树的另一种变体,它是基于提升(boosting)概念构建的集成模型。提升使用弱学习器构建树,是一种加法建模技术,也被称为顺序学习器,因为当前树从先前树的错误中学习。
### 2.2 学习过程
1. 构建初始决策树并进行预测。
2. 根据预测输出创建样本权重列,预测错误的样本赋予更高权重,预测准确的样本赋予较低权重。
3. 根据样本权重列创建新的训练数据集,确保错误样本在新数据中更受关注。
4. 使用新数据重复训练过程,继续构建树,直到达到用户指定的 `numTrees` 选项。
### 2.3 学习率和最终预测
- 学习率(`learningRate`)用于缩放每个弱学习器的输出。
- 最终模型预测公式:
\[First\ tree\ prediction + learningRate*Second\ tree\ prediction + \cdots + learningRate * Nth\ tree\ prediction\]
### 2.4 PySpark 代码示例
#### 分类
```python
from pyspark.ml.classification import GBTClassifier
clf = GBTClassifier(featuresCol='features', labelCol='y')
clf_model = clf.fit(binary_df)
print(clf_model.featureImportances)
print(clf_model.toDebugString)
```
#### 回归
```python
from pyspark.ml.regression import GBTRegressor
reg = GBTRegressor(featuresCol='features', labelCol='balance')
reg_model = reg.fit(continuous_df)
print(reg_model.featureImportances)
print(reg_model.toDebugString)
```
### 2.5 为何使用梯度提升
- 适用于对不平衡目标类进行建模。
- 与随机森林和决策树创建的深树相比,梯度提升构建浅树,有助于减少预测偏差。
## 3. 支持向量机(SVM)
### 3.1 原理
想象在一个满是学生的教室中,任务是画一条线将男生和女生分开,且要满足以下特征:
- 男生和女生之间有良好的分隔边界。
- 分隔过程中的错误率低。
支持向量机(SVM)通过超平面进行分类。对于线性数据,使用线性超平面分隔类别;对于非线性数据,可使用多项式或径向基函数(RBF)超平面进行分隔,这称为核技巧。目前 PySpark 仅支持线性核,而 Python 版本支持其他核。
### 3.2 误差函数
SVM 模型包含两个误差函数:
- 总误差 = 分类误差 + 边界误差
### 3.3 分类误差
分类误差衡量 SVM 模型中的预测误差,类似于误分类率。由于边界也是 SVM 的一个组成部分,任何落在边界内的观测值也被视为误差。分类误差是这些观测值到边界边界距离绝对值的总和。
### 3.4 边界误差
边界误差量化与边界边界相关的误差,边界越大,误差越小,反之亦然。边界宽度计算公式:
\[W_i=\frac{2}{\sqrt{a^2 + b^2}}\]
边界误差计算公式:
\[Margin\ error=\frac{1}{\sqrt{a^2 + b^2}}\]
### 3.5 PySpark 代码示例
```python
from pyspark.ml.classification import LinearSVC
clf = LinearSVC(featuresCol='features', labelCol='y')
clf_model = clf.fit(binary_df)
print(clf_model.intercept, clf_model.coefficients)
```
注意:SVM 训练时间较长,可以调整 `regParam` 选项加快模型训练速度。
## 4. 神经网络
### 4.1 基本概念
神经网络受人类大脑中生物神经元的启发,人工神经网络(ANN)基于此概念构建,使用激活函数激活某些神经元以获得所需输出。
### 4.2 ANN 架构要点
- 最简单的神经网络是没有隐藏层的输入和输出层,称为感知机,可用于构建线性或逻辑回归模型。
- 当激活函数为线性时,感知机产生线性回归;当激活函数为 Sigmoid 时,感知机产生逻辑回归。
- 可以在感知机的输入和输出层之间添加多个隐藏层,因此神经网络也称为多层感知机。
- 隐藏层中的单个单元称为隐藏单元。
- 可以使用激活函数打开或关闭隐藏单元,线性激活函数用于建模线性关系,非线性激活函数(如 ReLu 和 TanH)可用于建模复杂关系。
- 堆叠多个隐藏层可产生深度神经网络,增加隐藏层中隐藏单元的大小可产生更宽的神经网络。
- 神经网络不需要关于数据的先验知识,通过前馈(步骤 1)、反向传播和梯度下降(步骤 2)两个步骤对特征和目标之间的关系进行建模,因此也称为前馈神经网络。
- 在 PySpark 中,可以使用超参数 `maxIter`、`layers`、`blockS
0
0
复制全文
相关推荐










