【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取


前言

回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值也随之发生变化。而线性回归是机器学习中最简单的回归算法。常被用于销量预测,房价预测等场合。

一、多元线性回归

1.原理介绍

多元线性回归指的是就是一个样本具有多个特征的线性回归问题。对于一个具有n个特征的样本i而言,它的回归结果可以写作一个几乎人人熟悉的方程。其中等式左侧y为预测值,x为特征变量。
在这里插入图片描述
一般用向量写作:
在这里插入图片描述
那么,损失函数为(真实值-预测值)的平方和,如下:
在这里插入图片描述
这个损失函数代表了向量y−y ̂ 的L2范式的平方结果,L2范式的本质就是欧式距离,即是两个向量上对应点进行相减后求平方和再开平方,我们现在只实现了向量上每个点对应相减后的平方和,并没有开平方,所以我们的损失函数是L2范式,即欧式距离的平方结果。为了让预测值与真实值更加接近,即就是求这个损失函数最小值,求出其对应的参数w。如下:
在这里插入图片描述
接下来,就是数学问题了,损失函数S对参数变量w求导,使其导数等于0,即就是我们需要的w。

2.sklearn代码实现

class sklearn.linear_model.LinearRegression(*, fit_intercept=True, normalize=‘deprecated’, copy_X=True, n_jobs=None, positive=False)
其中:fit_intercept:布尔值,是否计算此模型的截距。
代码:

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# Load the diabetes dataset
X = np.arange(200)
y = -10*X+50+np.random.normal(0,100,200)
X_train,X_test,y_train,y_test = train_test_split(X[:,np.newaxis],y[:,np.newaxis],test_size=0.2,random_state=0)

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(X_train, y_train)

# Make predictions using the testing set
y_pred = regr.predict(X_test)

# The coefficients
print("Coefficients_w: ", regr.coef_)
print("intercep_b: ", regr.intercept_)
# The mean squared error
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))
# The coefficient of determination: 1 is perfect prediction
print("Coefficient of determination: %.2f" % r2_score(y_test, y_pred))

# Plot outputs
plt.scatter(X_test, y_test, color="black")
plt.plot(X_test, y_pred, color="blue", linewidth=3)

plt.show()

结果如下:
在这里插入图片描述

我们自定义了y=-10x+50的函数,并加入了一些噪音,进行建模测试,测试结果符合预期。

二、Lasso回归

1.原理介绍

除了传统的线性回归,使用比较多线性回归模型的还有lasso,它是被创造来作用于多重共线性问题的算法,如果输入特征的系数对我们的机器学习模型训练没有积极的贡献,则它们会缩小。这样,一些特征可能会被自动丢弃,即将它们的系数指定为零,常被选做特征选择。Lasso使用的是系数w的L1范式(L1范式则是系数w的绝对值)乘以正则化系数ɑ,如下:
在这里插入图片描述

2.sklearn代码实现

Sklearn API接口:class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, normalize=‘deprecated’, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection=‘cyclic’)
参数众多,但我们比较在意的参数是正则化系数ɑ。
代码:

import numpy as np
from sklearn.linear_model import LinearRegression, Lasso
from sklearn.model_selection import train_test_split
from sklearn import datasets

X,y = datasets.load_boston(return_X_y=True)
print(X.shape,y.shape)

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state=420)
    
#线性回归进行拟合
reg = LinearRegression().fit(Xtrain,Ytrain)
print("LinearRegression的系数:\n",(reg.coef_*100).tolist())

#Lasso进行拟合
lasso_ = Lasso(alpha=10).fit(Xtrain,Ytrain)
print("Lasso的系数:\n",(lasso_.coef_*100).tolist())

结果如下:
在这里插入图片描述
我们对boston房价数据集分别进行多元线性回归LinearRegression和Lasso回归,通过结果可以看出Lasso回归对于输入特征在模型中作用小的特征,直接将系数指定为0。这不失为一种特征提取的好办法。

三、总结

多元线性回归和Lasso回归都属于线性回归,他们也是经常用到的线性回归模型。本文讲解了多线线性回归如何建模、Lasso回归如何进行特征选择,希望对读者有所帮助。

链接: 【机器学习之特征工程】数据预处理、特征选择、降维及不平衡处理
链接: 【机器学习之集成算法】RandomForest和XGboost原理介绍与代码实现
链接: 【机器学习之逻辑回归】sklearn+python逻辑回归详解
链接: 【机器学习之聚类算法】KMeans原理及代码实现
链接: 【机器学习之决策树】决策树原理介绍及代码实现sklearn

猜你喜欢

转载自blog.csdn.net/qq_43018832/article/details/128103389