最小角回归 (LARS)
与可以预测分类或离散值的分类相比,回归是可以预测连续值(实数)的监督机器学习任务。在开始之前,如果您是初学者,我强烈推荐这篇文章。
最小角回归 (LARS) 是一种用于高维数据(即具有大量属性的数据)回归的算法。最小角度回归有点类似于前向逐步回归。由于它用于具有大量属性的数据,因此在每一步中,LARS 都会找到与目标值最高度相关的属性。可能有多个属性具有相同的相关性。在这种情况下,LARS 对属性进行平均,并沿与属性成相同角度的方向前进。这正是该算法被称为最小角度回归的原因。基本上,LARS 在不过度拟合模型的情况下朝着最优化计算的方向飞跃。
算法:
- 将所有值归一化以具有零均值和单位方差。
- 找到与残差最高度相关的变量。沿着这个方向移动回归线,直到我们到达另一个具有相同或更高相关性的变量。
注:残差是观察值和预测值之间的差异。变量,这里暗示一个属性。
- 当我们有两个具有相同相关性的变量时,以介于两者之间的角度(即两个变量之间的最小角度)移动回归线。
- 继续这个,直到我们所有的数据都用完,或者直到你认为模型足够大并且足够“通用”。
在数学上,LARS 的工作原理如下:
- 所有系数,“B”设置为 0。
- 预测变量 x j被发现与 y 最相关。
- 在与 y 最相关的方向上增加系数 B j并在发现其他预测变量 x k与 x j具有相等或更高的相关性时停止。
- 沿与 x j和 x k等角(具有相同角度)的方向延伸 (B j , B k )。
- 继续并重复,直到所有预测变量都在模型中。
Python3中LARS的实现:
在本例中,我们将使用波士顿住房数据集,该数据集具有马萨诸塞州波士顿地区房屋的中值。您可以在此处了解有关此数据集的更多信息。
对于评估,我们将使用 r2 分数。最好的 r2 分数是 1.0。它也可以是负数并且为 0,当预测器总是预测一个常数值时,不管属性值如何。
代码:
python3
# Importing modules that are required
from sklearn.datasets import load_boston
from sklearn.linear_model import LassoLars
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
# Loading dataset
dataset = load_boston()
X = dataset.data
y = dataset.target
# Splitting training and testing data
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 0.15, random_state = 42)
# Creating and fitting the regressor
regressor = LassoLars(alpha = 0.1)
regressor.fit(X_train, y_train)
# Evaluating model
prediction = regressor.predict(X_test)
print(f"r2 Score of test set : {r2_score(y_test, prediction)}")
输出:
r2 Score of test set : 0.6815908068381828
我们获得了大约 0.6816 的 r2 分数,这实际上是相当不错的。
使用 LARS 的优点:
- 计算速度与前向选择一样快,但有时可能更准确。
- 当特征的数量远大于数据实例的数量时,在数值上非常有效。
- 它可以很容易地修改为其他估计器生成解决方案。
使用 LARS 的缺点:
- LARS 对噪声高度敏感,有时会产生不可预测的结果。
参考:
- 维基百科
- scikit-learn 文档
- 迈向数据科学