机器学习——线性回归

目录

1.1 问题引入

1.2 线性回归模型

1.2.1 模型建立

1.2.2 策略确定

1.2.3 算法求解

1.2.4 线性回归模型流程

1.3 线性回归模型的 scikit-learn实现

1.3.1 普通线性回归(最小二乘法线性回归)

1.3.2 Lasso回归(Lasso Regression)

1.3.3 岭回归(Ridge Regression)

1.3.4 ElasticNet回归(ElasticNet Regression)

1.4 总结


1.1 问题引入

回归分析是一种预测性建模技术,主要用来研究自变量 (x_i) 和因变量 (y_i) 之间的关系,通常被用于预测分析、时间序列等

简单来说,回归分析就是使用曲线(直线是曲线的特例)或曲面来拟合某些已知的数据点,使数据点离曲线或曲面的距离差异达到最小,得到这样的回归曲线或曲面后,我们就可以对新的自变量进行预测,将其带入回归曲线或曲面,就可以得到一个对应的因变量值,达到预测目的

以二维数据为例,假设有一个房价数据如下表所示:

将上面的数据可视化可以得到:

 

 通过线性拟合得到:

 得到回归曲线后,当有新样本数据时(即给定横轴值),我们就可以定位出结果值(即对应的纵轴值),实现预测

本文使用波士顿房价预测来展示线性回归模型的应用,该数据集包含美国人口普查局收集的美国马萨诸塞州波士顿住房价格的有关信息,数据集很小,只有506个案例,每个样本都涵盖房屋的13种特征信息和对应的房屋价格,特征情况如下:

 \bullet        房屋价格MEDV:自有住房的中位数报价, 单位1000美元

该数据在version 1.2版本被移除了,原因懂的都懂,所以只能网上下载

链接:https://pan.baidu.com/s/1WELkePK7KCKFtrrghguueg?pwd=n73p

提取码:n73p

数据导入

# 1. 波士顿房价数据
import pandas as pd
data = pd.read_csv("boston.csv",header=0,sep=',')
X = data.drop(columns='MEDV')
y = data['MEDV']
print(X)
print(y)

输出:

 划分数据集

# 2. 划分数据集,训练集:验证集=7:3
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.7)

数据标准化

处理方法:

 \bullet       fit():Method calculates the parameters μ and σ and saves them as internal objects.
解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

 \bullet       transform():Method using these calculated parameters apply the transformation to a particular dataset.
解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等

 \bullet       fit_transform():joins the fit() and transform() method for transformation of dataset.
解释:fit_transform 是 fit 和 transform 的组合,既包括了训练又包含了转换。
transform() 和 fit_transform() 二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等

根据对之前部分trainData进行 fit 的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。

这段内容来自:https://blog.csdn.net/weixin_38278334/article/details/82971752

# 3. 数据标准化
from sklearn import preprocessing
standard_X = preprocessing.StandardScaler()
X_train = standard_X.fit_transform(X_train)
X_test = standard_X.transform(X_test)

y_train = y_train.values.reshape(-1,1)  #将y_train转置为一行
y_test = y_test.values.reshape(-1,1)    #将y_test转置为一行
standard_y = preprocessing.StandardScaler()
y_train = standard_y.fit_transform(y_train)
y_test = standard_y.transform(y_test)

print(X_train[:2])
print(X_test[:2])
print(y_train[:2])
print(y_test[:2])

输出:

1.2 线性回归模型

机器学习算法三要素详情:https://blog.csdn.net/T940842933/article/details/131606224?spm=1001.2014.3001.5502

1.2.1 模型建立

假设我们用 x^{(1)},x^{(2)},...,x^{(N)} 去代表影响房子价格的各个因素,例如:x^{(1)} 代表房子的面积, x^{(2)}代表房间的朝向……,x^{(N)}代表地理位置,房子的价格为 h(x)

显然,房子价格 h(x) 是一个由变量 x^{(1)},x^{(2)},...,x^{(N)} 共同决定的函数,由于不同因素对房子价格的影响不同,所以不同变量在函数中的权重也不同

我们给每项影响因素 x^{(j)},j=1,2,...,N 赋予一个对应的权重 w_j,j=1,2,...,N,由此我们可以得到因变量 h(x) 关于自变量 x^{(1)},x^{(2)},...,x^{(N)} 的函数表达式为:

h(x) =w_1x^{(1)}+w_2x^{(2)}+...+w_jx^{(j)}+...+w_Nx^{(N)}+b

写成矩阵的形式,

即向量 w = (w_1,w_2,...,w_N) 是由各个特征权重组成的;向量 x=(x^{(1)},x^{(2)},...,x^{(N)}) 是某个样本数据的特征向量,则:

h(x) = wx+b

得到表达式后,每当要预测一个新房子的价格时,我们只需要将房子对应的特征代入该表达式即可,例如某套房子 x_i,其特征为 x_{i}^{1},x_{i}^{2},...x_{i}^{N},那么利用模型预测出的结果为:

h(xi)=wx_i+b=\sum_{j=1}^{N}w_jx_{i}^{j}+b

但该表达式中的权重系数向量 w = (w_1,w_2,...,w_N) 和偏置常数 b 还未确定,不用担心,机器学习会从已知数据中学习出这些权重系数 w_j 和偏置常数 b 各自取多少时可以使得该回归模型的预测准确度更高,学习方式就是下面要讲的 “ 策略 ”

1.2.2 策略确定

假设现在我们拥有一份数据,包含了 N 套房子过去的交易情况,如下:

T = \begin{Bmatrix} (x_1,y_1), & (x_2,y_2), & ..., & (x_M,y_M) \end{Bmatrix}

其中 x_i,i=1,2,...,M 表示第 i 套房子,每套房子包含N 项特征 x_{i}^{1},x_{i}^{2},...x_{i}^{N},对应的价格为y_i,i=1,2,...,M

对于回归问题,我们采用的策略是使用最小均方误差损失来描述模型的好坏,即

L(w,b)=\frac{1}{2}\sum_{i=1}^{M}[h(x_i;w;b)-y_i]^2

其中,h(x_i;w;b) 是对样本数据 x_i 的预测值;y_i是样本数据 x_i 对应的实际值;样本总数为 Mw = (w_1,w_2,...,w_N) 是各个特征权重组成的向量,b 为偏置常数(反复提及这些量的含义,一定要理解清楚)

当损失函数 L(w,b) 取值最小时,意味着样本预测值与实际值差距最小,说明此时模型的预测效果是最好的

所以我们的策略就是最小化损失函数 L(w,b),即

min_{w,b}L(w,b)=min_{w,b} \frac{1}{2}\sum_{i=1}^{M}[h(x_i;w;b)-y_i]^2

通过求解上面的最优化问题,我们就可以得到待定参数w_j,j=1,2,...,N 和偏置常数 b,求解过程就是下文介绍的 ” 算法 “

1.2.3 算法求解

对于上面的优化问题,可以使用最常用的梯度下降法,对损失函数求偏导数

对 w 求偏导:

\frac{\partial }{\partial w}L(w,b)=\frac{\partial }{\partial w}[\frac{1}{2}\sum_{i=1}^{M}[h(x_i;w;b)-y_i]^2] \\\\=2\cdot \frac{1}{2}\cdot [h(x_i;w;b)-y_i]\cdot \frac{\partial }{\partial w}[h(x_i;w;b)-y_i] \\\\=(wx_i+b-y_i)\cdot \frac{\partial }{\partial w}(wx_i+b-y_i) \\\\=(wx_i+b-y_i)x_i

对 b 求偏导:

\frac{\partial }{\partial b}L(w,b)=\frac{\partial }{\partial b}[\frac{1}{2}\sum_{i=1}^{M}[h(x_i;w;b)-y_i]^2] \\\\=2\cdot \frac{1}{2}\cdot [h(x_i;w;b)-y_i]\cdot \frac{\partial }{\partial b}[h(x_i;w;b)-y_i] \\\\=(wx_i+b-y_i)\cdot \frac{\partial }{\partial b}(wx_i+b-y_i) \\\\=(wx_i+b-y_i)

所以可以得到权重系数向量 w 和 偏置常数 b 的更新式为

w\leftarrow w-\eta \cdot \frac{\partial }{\partial w}L(w,b)=w-\eta (wx_i+b-y_i)x_i

b\leftarrow b-\eta \cdot \frac{\partial }{\partial b}L(w,b)=b-\eta (wx_i+b-y_i)

其中,0<\eta \leq 1 是学习率,即学习步长,这样通过迭代可以使损失函数 L(w,b) 以较快的速度不断减小,直至满足要求

1.2.4 线性回归模型流程

输入:训练集 T = \begin{Bmatrix} (x_1,y_1), & (x_2,y_2), & ..., & (x_M,y_M) \end{Bmatrix},学习率 \eta

输出:线性回归模型 h(x) = wx+b

步骤如下:

第 1 步:选取初值向量 w 和偏置常数 b

第 2 步:在训练集中随机选择数据 (x_i,y_i),进行更新

w\leftarrow w-\eta (wx_i+b-y_i)x_i

b\leftarrow b-\eta (wx_i+b-y_i)

第 3 步:重复第 2 步,直至模型满足训练要求

1.3 线性回归模型的 scikit-learn实现

普通线性回归只是最小化了损失函数 L(w,b),除此之外还有基于 L1 正则化的Lasso回归,基于 L2 正则化的岭回归,以及基于 L1 和 L2 正则化融合的ElasticNet回归

正则化详情:https://blog.csdn.net/T940842933/article/details/131876860?spm=1001.2014.3001.5502

1.3.1 普通线性回归(最小二乘法线性回归)

普通线性回归原理如上所述,scikit-learn实现如下:

from sklearn.linear_model import LinearRegression
Linear_clf = LinearRegression(fit_intercept=True, copy_X=True, n_jobs=1)

参数

\bullet        fit_intercept:选择是否计算偏置常数 b,默认是True,表示计算

\bullet        copy_X:选择是否拷贝特征矩阵X,默认True,表示拷贝,若设置为False,机器学习过程中会影响原始数据,导致X矩阵被覆盖

\bullet        n_jobs:指定计算机运行使用的CPU核数,默认-1,表示使用所有可用的CPU核

属性

\bullet        coef_:用于输出线性回归模型的权重向量 w

\bullet        intercept_:用于输出线性回归模型的偏置常数 b

方法

\bullet        fit(X_train, y_train):在训练集 (X_train, y_trian) 上训练模型

\bullet        predicate(X):用训练好的模型来预测待预测数据集X,返回数据为预测集对应的预测结果\hat{y}

\bullet        score(X_test, y_test):返回模型在测试集 (X_test, y_test) 上的预测准确率,计算公式为

score=1-\frac{\sum {(y_i-\hat{y}_i)^2}}{(y_i-\hat{y})^2}

其中,y_i 表示测试集样本 x_i 对应的真值,\hat{y}_i为测试集样本 x_i 对应的预测值,\hat{y}为测试集中所有样本对应真值 y_i 的平均;score是一个小于 1 的值,也可能是负值,其值越大表示模型预测性能好

程序如下:

# 4.1 运用普通线性回归模型训练和预测
from sklearn.linear_model import LinearRegression
Linear_clf = LinearRegression(fit_intercept=True, copy_X=True, n_jobs=1)
Linear_clf.fit(X_train,y_train)    #训练模型
Linear_clf_score = Linear_clf.score(X_test,y_test)    #模型得分
Linear_clf_result = Linear_clf.predict(X_test)    #验证集对应的预测结果
print("特征向量 w = ",Linear_clf.coef_)
print("偏置常数 b = ",Linear_clf.intercept_)
print("拟合优度R^2:",Linear_clf_score)

Drawing(y_test, Linear_clf_result,'Linear Regression')  #画图
# 5.画图
import matplotlib.pyplot as plt
def Drawing(y_test, result, title):
    fig = plt.figure(figsize=(20, 3))
    axes = fig.add_subplot(1, 1, 1)
    line1, = axes.plot(range(len(y_test)),y_test,'b',label='Actual_Value')
    line2, = axes.plot(range(len(result)),result,'r--',label='Predicted',linewidth=2)
    axes.grid()
    fig.tight_layout()
    plt.legend(handles=[line1,line2])
    plt.title(title)
    plt.show()

输出:

可以看出普通线性回归模型的预测能力不是特别优秀

1.3.2 Lasso回归(Lasso Regression)

Lasso回归就是在基本的线性回归的基础上加一个L1正则化项 \alpha ||w||_1,\alpha \geq 0

scikit-learn实现如下:

from sklearn.linear_model import Lasso
Lasso_clf = Lasso(alpha=1.0,    #L1正则化项前面带的常数调节因子
                  fit_intercept=True,    #选择是否计算偏置常数  ,默认为True,表示计算
                  precompute=False,    #选择是否使用预先计算的Gram矩阵来加快计算,默认False
                  max_iter=1000,    #设置最大迭代次数,默认为1000
                  tol=0.0001,    #判定判断迭代收敛的阈值,默认为0.0001
                  warm_start=False,    #设定是否使用前一次训练的结果继续训练,默认False,表示每次从头开始训练
                  positive=False,    #默认为False,如果为True,则表示强制所有权重系数为正值
                  selection='cyclic')    #每轮迭代是选择哪个权重系数进行更新,默认为cycle,表示从前往后依次选择,如果设定为random,则表示每次随机选择一个权重系数进行更新

参数

\bullet       alpha:L1正则化项前面带的常数调节因子

\bullet       fit_intercept:选择是否计算偏置常数 b ,默认为True,表示计算

\bullet       precompute:选择是否使用预先计算的Gram矩阵来加快计算,默认False

\bullet       max_iter:设置最大迭代次数,默认为1000

\bullet       tol:判定判断迭代收敛的阈值,默认为0.0001

\bullet       warm_start:设定是否使用前一次训练的结果继续训练,默认False,表示每次从头开始训练

\bullet       positive:默认为False,如果为True,则表示强制所有权重系数为正值

\bullet       selection:每轮迭代是选择哪个权重系数进行更新,默认为cycle,表示从前往后依次选择,如果设定为random,则表示每次随机选择一个权重系数进行更新

属性

\bullet        coef_:用于输出线性回归模型的权重向量 w

\bullet        intercept_:用于输出线性回归模型的偏置常数 b

\bullet        n_iter:用于输出实际迭代次数

方法同上

程序如下:

# 4.2 运用Lasso回归模型训练和预测
from sklearn.linear_model import Lasso
Lasso_clf = Lasso(alpha=0.001)
Lasso_clf.fit(X_train,y_train)
Lasso_clf_score = Lasso_clf.score(X_test,y_test)  #模型得分
Lasso_clf_result = Lasso_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",Lasso_clf.coef_)
print("偏置常数 b = ",Lasso_clf.intercept_)
print("迭代次数:",Lasso_clf.n_iter_)
print("拟合优度R^2:",Lasso_clf_score)

Drawing(y_test, Lasso_clf_result,'Lasso Regression')  #画图

输出:

 可以看出,Lasso回归的拟合优度是略高于普通线性回归的,因为加上了L1正则项

1.3.3 岭回归(Ridge Regression)

岭回归就是在普通线性回归的基础上加上了一个L2正则项\alpha ||w||_{2}^{2},\alpha \geq 0

scikit-learn实现如下:

Ridge_clf = Ridge(alpha=1.0,
                  fit_intercept=True,
                  max_iter=1000,
                  tol=0.0001,
                  solver='auto'
    )

参数

\bullet       alpha,fit_intercept,max_iter,tol 的用法与Lasso回归相同

\bullet       slover:指定求解最优化问题的算法,默认为auto,表示自动选择,其他可选项如下:

        svd:使用奇异值分解来计算回归系数

        cholesky:使用标准的scipy.linalg.solve 函数来求解

        sparse_cg:使用scipy.sparse.linalg.cg中的共轭梯度求解器求解

        lsqr:使用专门的正则化最小二乘法scipy.sparse.linalg.lsqr,速度是最快的

        sag:使用随机平均梯度下降法求解

属性和方法同上

程序如下:

# 4.3 运用Lasso回归模型训练和预测
from sklearn.linear_model import Ridge
Ridge_clf = Ridge(alpha=0.001)
Ridge_clf.fit(X_train,y_train)
Ridge_clf_score = Ridge_clf.score(X_test,y_test)  #模型得分
Ridge_clf_result = Ridge_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",Ridge_clf.coef_)
print("偏置常数 b = ",Ridge_clf.intercept_)
print("迭代次数:",Ridge_clf.n_iter_)
print("拟合优度R^2:",Ridge_clf_score)

Drawing(y_test, Ridge_clf_result,'Ridge Regression')  #画图

输出:

 可以看出,L2正则项是优于L1正则项的,岭回归拟合优度有大幅提高

1.3.4 ElasticNet回归(ElasticNet Regression)

ElasticNet回归(弹性网络回归)是将 L1 和 L2 正则化进行融合,即在基本的线性回归种加入下面的混合正则化项:

\alpha \rho ||w||_1+\frac{\alpha (1-\rho )}{2}||w||_{2}^{2},\alpha \geq 0,1\geq \rho\geq 0

scikit-learn实现如下:

from sklearn.linear_model import ElasticNet
ElasticNet_clf = ElasticNet(alpha=1.0,    #L1正则化项前面带的常数调节因子
                            l1_ratio=0.5,    #l1_ratio参数就是上式中的ρ值,默认为0.5
                            fit_intercept=True,    #选择是否计算偏置常数  ,默认为True,表示计算
                            precompute=False,    #选择是否使用预先计算的Gram矩阵来加快计算,默认False
                            max_iter=1000,    #设置最大迭代次数,默认为1000
                            tol=0.0001,    #判定判断迭代收敛的阈值,默认为0.0001
                            warm_start=False,    #设定是否使用前一次训练的结果继续训练,默认False,表示每次从头开始训练
                            positive=False,    #默认为False,如果为True,则表示强制所有权重系数为正值
                            selection='cyclic')    #每轮迭代是选择哪个权重系数进行更新,默认为cycle,表示从前往后依次选择,如果设定为random,则表示每次随机选择一个权重系数进行更新

参数

\bullet       alpha,fit_intercept,precompute,max_iter,tol,warm_start,positive,selection与Lasso回归用法相同

\bullet       l1_ratio:l1_ratio参数就是上式中的ρ值,默认为0.5

属性和方法同上

程序如下:

# 4.4 运用Lasso回归模型训练和预测
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import ElasticNet
ElasticNet_clf = ElasticNet(alpha=0.001,l1_ratio=0.71)
ElasticNet_clf.fit(X_train,y_train)
ElasticNet_clf_score = ElasticNet_clf.score(X_test,y_test)  #模型得分
ElasticNet_clf_result = ElasticNet_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",ElasticNet_clf.coef_)
print("偏置常数 b = ",ElasticNet_clf.intercept_)
print("迭代次数:",ElasticNet_clf.n_iter_)
print("拟合优度R^2:",ElasticNet_clf_score)

Drawing(y_test, ElasticNet_clf_result,'Ridge Regression')  #画图

输出:

 

 预测准确率又高了一丢丢

1.4 总结

本文详细介绍了线性回归的基本原理和过程,展现了线性回归模型的scikit-learn实现,包括:普通线性回归、基于 L1 正则化的Lasso回归、基于 L2 正则化的岭回归、基于 L1 和 L2 正则化融合的ElasticNet回归四种,从结果看ElasticNet回归模型的性能最优

不足的一点,模型的参数是随意取值的,由于没有做模型优化,所以四种模型的预测准确率都不是特别高,而且四种模型的区分度也不是很高

感兴趣的朋友可以自己尝试完成优化任务,模型调优详情https://blog.csdn.net/T940842933/article/details/131968261?spm=1001.2014.3001.5502

原码如下:

# 1. 波士顿房价数据
import pandas as pd
data = pd.read_csv("boston.csv",header=0,sep=',')
X = data.drop(columns='MEDV')
y = data['MEDV']
"""
print(X)
print(y)
"""
# 2. 划分数据集,训练集:验证集=7:3
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.7)

# 3. 数据标准化
from sklearn import preprocessing
standard_X = preprocessing.StandardScaler()
X_train = standard_X.fit_transform(X_train)
X_test = standard_X.transform(X_test)

y_train = y_train.values.reshape(-1,1)  #将y_train转置为一行
y_test = y_test.values.reshape(-1,1)    #将y_test转置为一行
standard_y = preprocessing.StandardScaler()
y_train = standard_y.fit_transform(y_train)
y_test = standard_y.transform(y_test)
"""
print(X_train[:2])
print(X_test[:2])
print(y_train[:2])
print(y_test[:2])
"""

# 5.画图
import matplotlib.pyplot as plt
def Drawing(y_test, result, title):
    fig = plt.figure(figsize=(20, 3))
    axes = fig.add_subplot(1, 1, 1)
    line1, = axes.plot(range(len(y_test)),y_test,'b',label='Actual_Value')
    line2, = axes.plot(range(len(result)),result,'r--',label='Predicted',linewidth=2)
    axes.grid()
    fig.tight_layout()
    plt.legend(handles=[line1,line2])
    plt.title(title)
    plt.show()

# 4.1 运用普通线性回归模型训练和预测
from sklearn.linear_model import LinearRegression
Linear_clf = LinearRegression(fit_intercept=True, copy_X=True, n_jobs=1)
Linear_clf.fit(X_train,y_train)     #训练模型
Linear_clf_score = Linear_clf.score(X_test,y_test)  #模型得分
Linear_clf_result = Linear_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",Linear_clf.coef_)
print("偏置常数 b = ",Linear_clf.intercept_)
print("拟合优度R^2:",Linear_clf_score)
Drawing(y_test, Linear_clf_result,'Linear Regression')  #画图

# 4.2 运用Lasso回归模型训练和预测
from sklearn.linear_model import Lasso
Lasso_clf = Lasso(alpha=0.001)
Lasso_clf.fit(X_train,y_train)
Lasso_clf_score = Lasso_clf.score(X_test,y_test)  #模型得分
Lasso_clf_result = Lasso_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",Lasso_clf.coef_)
print("偏置常数 b = ",Lasso_clf.intercept_)
print("迭代次数:",Lasso_clf.n_iter_)
print("拟合优度R^2:",Lasso_clf_score)
Drawing(y_test, Lasso_clf_result,'Lasso Regression')  #画图


# 4.3 运用Lasso回归模型训练和预测
from sklearn.linear_model import Ridge
Ridge_clf = Ridge(alpha=0.001)
Ridge_clf.fit(X_train,y_train)
Ridge_clf_score = Ridge_clf.score(X_test,y_test)  #模型得分
Ridge_clf_result = Ridge_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",Ridge_clf.coef_)
print("偏置常数 b = ",Ridge_clf.intercept_)
print("迭代次数:",Ridge_clf.n_iter_)
print("拟合优度R^2:",Ridge_clf_score)
Drawing(y_test, Ridge_clf_result,'Ridge Regression')  #画图


# 4.4 运用Lasso回归模型训练和预测
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import ElasticNet
ElasticNet_clf = ElasticNet(alpha=0.001,l1_ratio=0.71)
ElasticNet_clf.fit(X_train,y_train)
ElasticNet_clf_score = ElasticNet_clf.score(X_test,y_test)  #模型得分
ElasticNet_clf_result = ElasticNet_clf.predict(X_test)  #验证集对应的预测结果
print("特征向量 w = ",ElasticNet_clf.coef_)
print("偏置常数 b = ",ElasticNet_clf.intercept_)
print("迭代次数:",ElasticNet_clf.n_iter_)
print("拟合优度R^2:",ElasticNet_clf_score)
Drawing(y_test, ElasticNet_clf_result,'Ridge Regression')  #画图
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
机器学习中,线性回归有多种模型可以使用。其中包括传统的线性回归模型和Lasso模型。 传统的线性回归模型是一种非常经典的方法,它通过拟合一个线性函数来预测因变量和自变量之间的关系。这个模型的数学原理可以通过最小二乘法来推导和求解。最小二乘法的目标是最小化预测值与实际观测值之间的残差平方和,从而得到最优的模型参数。\[1\] Lasso模型是一种用于处理多重共线性问题的算法。它通过对系数进行L1正则化来实现特征选择。L1正则化是指将系数的绝对值乘以一个正则化系数,使得一些特征的系数变为零,从而自动丢弃这些特征。Lasso模型在sklearn库中有相应的实现。\[2\] 线性回归是回归分析中最常用的方法之一,因为它比非线性模型更容易拟合,并且估计的统计特性也更容易确定。线性回归模型可以使用最小二乘法来求解,通过最小化残差平方和来得到最优的模型参数。\[3\] 综上所述,机器学习线性回归有多种模型可供选择,包括传统的线性回归模型和Lasso模型。这些模型可以通过最小二乘法和L1正则化来求解。 #### 引用[.reference_title] - *1* [机器学习——线性回归模型及python代码实现](https://blog.csdn.net/qq_43045620/article/details/123079305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【机器学习线性回归】多元线性回归模型的搭建+Lasso回归的特征提取](https://blog.csdn.net/qq_43018832/article/details/128103389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [机器学习常用模型-线性回归模型详解(简单易懂)](https://blog.csdn.net/weixin_43308610/article/details/123346498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值