线性回归两种求解方式总结

浪子不回头ぞ 提交于 2020-03-07 06:46:48

线性回归两种求解方式总结

使用梯度下降进行预测

from sklearn.datasets import load_boston # 波士顿房价数据集使用API
from sklearn.linear_model import LinearRegression,SGDRegressor ##回归预测时使用的API
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler ## 标准化API
def myLinear():
    """线性回归直接预测房子价格"""
    # 获取数据
    lb=load_boston()
    # 分割数据集
    x_train,x_text,y_train,y_text=train_test_split(lb.data,lb.target,test_size=0.25)

    # 进行标准化处理
    std_x=StandardScaler()
    x_train=std_x.fit_transform(x_train)
    x_text=std_x.transform((x_text))
    #目标值
    std_y=StandardScaler()
    y_train=std_y.fit_transform(y_train)
    y_text=std_y.transform(y_text)
    #正规方程调用预测
    lr=LinearRegression()
    lr.fit(x_train,y_train)
    print(lr.coef_)
    # 预测测试集房子价格
    y_predict=std_y.inverse_transform(lr.predict(x_text))
    print("测试集每个房子的预测价格:",y_predict)

def tidu_boston():
    """线性回归直接预测房子价格"""
    # 获取数据
    lb=load_boston()
    # 分割数据集
    x_train,x_text,y_train,y_text=train_test_split(lb.data,lb.target,test_size=0.25)

    # 进行标准化处理
    std_x=StandardScaler()
    x_train=std_x.fit_transform(x_train)
    x_text=std_x.transform((x_text))
    #目标值
    std_y=StandardScaler()
    y_train=std_y.fit_transform(y_train)
    y_text=std_y.transform(y_text)
    #梯度下降进行房价预测
    sgd=SGDRegressor()
    sgd.fit(x_train,y_train)
    print(sgd.coef_)
    # 预测测试集房子价格
    y_predict=std_y.inverse_transform(sgd.predict(x_text))
    print("测试集每个房子的预测价格:",y_predict)

if __name__ == '__main__':
    # myLinear()
    tidu_boston()

回归性能评估(均方误差)

在这里插入图片描述
api:sklearn.metrics.mean_squared_error
.mean_squared_error(y_true,y_pre)

  • 均方误差回归损失
  • y_true:真实值
  • y_pre:预测值
  • return:浮点数结果
    注意:真实值,预测值为标准化之前的值

梯度下降代码:

from sklearn.datasets import load_boston # 波士顿房价数据集使用API
from sklearn.linear_model import LinearRegression,SGDRegressor ##回归预测时使用的API
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler ## 标准化API
from sklearn.metrics import mean_squared_error
def myLinear():
    """线性回归直接预测房子价格"""
    # 获取数据
    lb=load_boston()
    # 分割数据集
    x_train,x_text,y_train,y_text=train_test_split(lb.data,lb.target,test_size=0.25)

    # 进行标准化处理
    std_x=StandardScaler()
    x_train=std_x.fit_transform(x_train)
    x_text=std_x.transform((x_text))
    #目标值
    std_y=StandardScaler()
    y_train=std_y.fit_transform(y_train)
    y_text=std_y.transform(y_text)
    #正规方程调用预测
    lr=LinearRegression()
    lr.fit(x_train,y_train)
    print(lr.coef_)
    # 预测测试集房子价格
    y_predict=std_y.inverse_transform(lr.predict(x_text))
    print("测试集每个房子的预测价格:",y_predict)
    print("正规方程的均方差:",mean_squared_error(std_y.inverse_transform(y_text),y_predict))
def tidu_boston():
    """线性回归直接预测房子价格 """
    # 获取数据
    lb=load_boston()
    # 分割数据集
    x_train,x_text,y_train,y_text=train_test_split(lb.data,lb.target,test_size=0.25)

    # 进行标准化处理
    std_x=StandardScaler()
    x_train=std_x.fit_transform(x_train)
    x_text=std_x.transform((x_text))
    #目标值
    std_y=StandardScaler()
    y_train=std_y.fit_transform(y_train)
    y_text=std_y.transform(y_text)
    #梯度下降进行房价预测
    sgd=SGDRegressor()
    sgd.fit(x_train,y_train)
    print(sgd.coef_)
    # 预测测试集房子价格
    y_predict=std_y.inverse_transform(sgd.predict(x_text))
    print("测试集每个房子的预测价格:",y_predict)

if __name__ == '__main__':
    # myLinear()
    tidu_boston()

梯度下降和正规方程对比

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!