一.案例简介

通过sklearn中的波士顿房价数据,实现对于数据读取、数据处理、模型训练,从而加强对于线性回归的认识。

二.代码详解

1.导包

# from sklearn.datasets import load_boston                # 数据   目前这个数据已经不可使用,更换方式已经给出
from sklearn.preprocessing import StandardScaler        # 特征处理
from sklearn.model_selection import train_test_split    # 数据集划分
from sklearn.linear_model import LinearRegression       # 正规方程的回归模型
from sklearn.linear_model import SGDRegressor           # 梯度下降的回归模型
from sklearn.metrics import mean_squared_error, root_mean_squared_error, mean_absolute_error  # 均方误差评估

from sklearn.linear_model import Ridge, RidgeCV


import pandas as pd
import numpy as np

2.数据读取

#1.加载波士顿房价数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])  #hstack()函数的作用:水平拼接数组
target = raw_df.values[1::2, 2]
print(f'特征:{data.shape}')
print(f'标签:{target.shape}')

print(f'特征数据:{data[:5]}')
print(f'标签数据:{target[:5]}')

注意:由于一些原因,原sklearn中的数据不可直接使用,但是根据报错提示其他方式获取数据

3.数据预处理

#2.数据的预处理。切分训练集和测试集
#参1:特征数据     参2:标签     参3:测试集和训练集的比例      参4:随机种子
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=23)

#3特征工程
#3.1创建标准化对象
transfer = StandardScaler()
#3.2对数据进行标准化
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

4.模型训练

#4. 模型训练
#4.1创建 线性回归 正规方程 模型对象
estimator = LinearRegression(fit_intercept=True)    #fit_intercept:是否需要截距(偏执)默认时True
#4.2 模型选练
estimator.fit(x_train,y_train)
#4.3 打印模型计算出的w  和  b
print(f'权重:{estimator.coef_}')
print(f'偏执:{estimator.intercept_}')

5.模型预测以及评估

#5.模型预测
y_pre = estimator.predict(x_test)
print(f'预测结果为:{y_pre}')


#6.模型评估
#参1:测试集的标签数据        参2:预测结果
print(f'均方误差为:{mean_squared_error(y_test, y_pre)}')         #MSE: 均方误差
print(f'均方根误差为:{root_mean_squared_error(y_test, y_pre)}')    #RMES
print(f'平均绝对误差误差为:{mean_absolute_error(y_test, y_pre)}')        #MAE

6.完整代码

# from sklearn.datasets import load_boston                # 数据   目前这个数据已经不可使用,更换方式已经给出
from sklearn.preprocessing import StandardScaler        # 特征处理
from sklearn.model_selection import train_test_split    # 数据集划分
from sklearn.linear_model import LinearRegression       # 正规方程的回归模型
from sklearn.linear_model import SGDRegressor           # 梯度下降的回归模型
from sklearn.metrics import mean_squared_error, root_mean_squared_error, mean_absolute_error  # 均方误差评估

from sklearn.linear_model import Ridge, RidgeCV


import pandas as pd
import numpy as np


#1.加载波士顿房价数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])  #hstack()函数的作用:水平拼接数组
target = raw_df.values[1::2, 2]
print(f'特征:{data.shape}')
print(f'标签:{target.shape}')

print(f'特征数据:{data[:5]}')
print(f'标签数据:{target[:5]}')

#2.数据的预处理。切分训练集和测试集
#参1:特征数据     参2:标签     参3:测试集和训练集的比例      参4:随机种子
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=23)

#3特征工程
#3.1创建标准化对象
transfer = StandardScaler()
#3.2对数据进行标准化
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

#4. 模型训练
#4.1创建 线性回归 正规方程 模型对象
estimator = LinearRegression(fit_intercept=True)    #fit_intercept:是否需要截距(偏执)默认时True
#4.2 模型选练
estimator.fit(x_train,y_train)
#4.3 打印模型计算出的w  和  b
print(f'权重:{estimator.coef_}')
print(f'偏执:{estimator.intercept_}')


#5.模型预测
y_pre = estimator.predict(x_test)
print(f'预测结果为:{y_pre}')


#6.模型评估
#参1:测试集的标签数据        参2:预测结果
print(f'均方误差为:{mean_squared_error(y_test, y_pre)}')         #MSE: 均方误差
print(f'均方根误差为:{root_mean_squared_error(y_test, y_pre)}')    #RMES
print(f'平均绝对误差误差为:{mean_absolute_error(y_test, y_pre)}')        #MAE




最终效果展示

三.总结

通过波士顿房价预测案例,学习了线性回归相关API的调用,加强了对于线性回归的认识

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐