当前位置:   article > 正文

机器学习——线性回归_机器学习线性回归

机器学习线性回归

线性回归

在这里插入图片描述

利用回归方程(函数),对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式
一个自变量叫单变量回归,多个自变量叫多元回归

线性回归主要有两种模型,一种是线性关系,另一种是非线性关系,出现一次幂是线性关系,出现高次幂是非线性关系

from sklearn.linear_model import LinearRegression
x=[[80,86],[82,80],[85,78],[90,90],[86,82],[82,90],[78,90],[92,94]]
y=[84.2,80.6,80.1,90,83.2,87.6,79.4,93.4]
estimator=LinearRegression()
estimator.fit(x,y)
print('线性回归的系数是:\n',estimator.coef_)
print('输出预测结果:\n',estimator.predict([[100,80]]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

线性回归的系数是:
[0.3 0.7]
输出预测结果:
[86.]

损失和优化

损失函数

最小二乘法
在这里插入图片描述

优化算法

正规方程

也就是用矩阵的形式来求参数w
在这里插入图片描述
推导过程
在这里插入图片描述

梯度下降

基本思想可以类比一个下山的过程
在这里插入图片描述

梯度的概念
在单变量函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

常见梯度下降算法
全梯度下降算法(FGD)
在更新参数时使用所有的样本来进行更新
在这里插入图片描述

随机梯度下降(SGD)
每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程
在这里插入图片描述

小批量梯度下降算法(mini-batch GD)
每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重
在这里插入图片描述

随机平均梯度下降算法(SAGD)
随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新参数
在这里插入图片描述

对比

在这里插入图片描述
小规模数据:正规方程(不能解决拟合问题),岭回归
大规模数据:梯度下降法

波士顿房价预测

y=kx+b中,k为系数,b为偏置

回归性能评估
MSE均方误差
在这里插入图片描述
sklearn.matrics.mean_squared_error(y_true,y_pred)

正规方程

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

def linear_model1():
    '''
    线性回归:正规方程
    '''
    #1获取数据
    boston=load_boston()
    
    #2数据基本处理
    #2.1分割数据
    x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2)
    
    #3特征工程-标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.fit_transform(x_test)
    
    #4机器学习-线性回归
    estimator=LinearRegression()
    estimator.fit(x_train,y_train)
    
    print('这个模型的偏置是:\n',estimator.intercept_)
    print('这个模型的系数是:\n',estimator.coef_)
    
    #5模型评估
    #5.1预测值
    y_pre=estimator.predict(x_test)
    print('预测值是:\n',y_pre)
    
    #5.2均方误差
    ret=mean_squared_error(y_test,y_pre)
    print('均方误差:\n',ret)
    
linear_model1()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

梯度下降

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.metrics import mean_squared_error

def linear_model2():
    '''
    线性回归:梯度下降法
    '''
    #1获取数据
    boston=load_boston()
    
    #2数据基本处理
    #2.1分割数据
    x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2)
    
    #3特征工程-标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.fit_transform(x_test)
    
    #4机器学习-线性回归
    estimator=SGDRegressor(max_iter=1000) #最大迭代次数设置为1000,就不会报错了
    estimator.fit(x_train,y_train)
    
    print('这个模型的偏置是:\n',estimator.intercept_)
    print('这个模型的系数是:\n',estimator.coef_)
    
    #5模型评估
    #5.1预测值
    y_pre=estimator.predict(x_test)
    print('预测值是:\n',y_pre)
    
    #5.2均方误差
    ret=mean_squared_error(y_test,y_pre)
    print('均方误差:\n',ret)
    
linear_model2()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

正则化(解决过拟合的方式之一)

sklearn.linear_model.Ridge(alpha=1.0,solver='auto',normalize=False)
具有L2正则化的线性回归,alpha是正则化力度,solver会根据数据自动选择优化方法,normalize是数据是否进行标准化

在这里插入图片描述
L1正则化:将高次方项的系数变成0
L2正则化:将高次方项的系数变成特别小的数

正则化线性模型

岭回归(Ridge Regression)
属于L2正则化,使用的是随机平均梯度下降(SAGD)
在原本损失函数中添加正则项
在这里插入图片描述

Lasso回归(Lasso Regression)
属于L1正则化
在这里插入图片描述
在这里插入图片描述

弹性网络(Elastic Net)
在岭回归和Lasso回归中进行了折中,通过混合比r进行控制
在这里插入图片描述

常用:岭回归
只有少部分特征是有用的:弹性网络,Lasso回归

线性回归的改进-岭回归

岭回归实现了SAG
正则化力度越大,权重系数会越小
正则化力度越小,权重系数会越大

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor,RidgeCV,Ridge
from sklearn.metrics import mean_squared_error

def linear_model3():
    '''
    线性回归:岭回归
    '''
    #1获取数据
    boston=load_boston()
    
    #2数据基本处理
    #2.1分割数据
    x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2)
    
    #3特征工程-标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.fit_transform(x_test)
    
    #4机器学习-线性回归
    #estimator=Ridge(alpha=1.0) #参数表示正则化力度
    estimator=RidgeCV(alphas=(0.001,0.01,0.1,1,10,100)) #交叉验证的方式
    estimator.fit(x_train,y_train)
    
    print('这个模型的偏置是:\n',estimator.intercept_)
    print('这个模型的系数是:\n',estimator.coef_)
    
    #5模型评估
    #5.1预测值
    y_pre=estimator.predict(x_test)
    print('预测值是:\n',y_pre)
    
    #5.2均方误差
    ret=mean_squared_error(y_test,y_pre)
    print('均方误差:\n',ret)
    
linear_model3()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

模型的保存和加载

老版本方法
训练好进行保存
from sklearn.externals import joblib
保存:joblib.dump(estimator,'test.pkl')
加载:estimator=joblib.load('test.pkl')
注意:文件名随便起,但后缀名一定是.pkl

新版本方法
pip install joblib
import joblib

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/799261
推荐阅读
相关标签
  

闽ICP备14008679号