线性回归示例 代码篇
机器学习 - 建模
1.获取数据 (pandas、numpy)
2.数据预处理 (训练集:特征、标签,测试集:特征、标签)
3.特征工程 (量纲问题、归一化/标准化)
4.模型训练 (正规方程模型、梯度下降 回归模型)
5.模型预测 (预测值、权重、偏置)
6.模型评估 (MAE、MSE、RMSE)
参考之前 机器学习-浅析:https://blog.csdn.net/i_k_o_x_s/article/details/159696090?spm=1001.2014.3001.5501
python
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 , #MSE 均方误差
mean_absolute_error, #MAE 平均绝对误差
root_mean_squared_error) #RMSE 均方根误差
import numpy as np
import pandas as pd
# 1. 获取数据
# 直接从原始地址下载波士顿数据集
# 从第 1 行开始,每隔一行取一行,并且只取前 2 列
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]])
target = raw_df.values[1::2, 2]
'''
原始数据 第一行 + 第二行 前2个是特征。 第二行的第3个 是标签
# 特征名
feature_names = [
'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'
]
0 1 2 3 4 5 6 7 8 9 10
0 0.00632 18.00 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3
1 396.90000 4.98 24.00 NaN NaN NaN NaN NaN NaN NaN NaN
2 0.02731 0.00 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8
3 396.90000 9.14 21.60 NaN NaN NaN NaN NaN NaN NaN NaN
'''
print(f'训练集数据->特征值:{data[:4]}')
print(f'训练集数据->标签值:{target[:4]}')
# 2. 数据预处理
'''
参数1 -> 训练集特征
参数2 -> 训练集标签
参数3 -> 测试集占比 一般是 0.2 - 0.3 8:2, 7:3
参数4 -> 随机种子 22 随便写多少都可以
结果1 -> 训练集用的特征
结果2 -> 训练集用的标签
结果3 -> 测试集用的特征
结果4 -> 测试集用的标签
'''
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=22)
# 3.特征工程 标准化 量纲问题 _ 特征单位不统一 为什么用标准化 因为归一化受极值影响
#3.1 创建标准化对象
transfer = StandardScaler()
#3.2 对训练集数据和测试集数据进行标准化处理
#fit_transform 拿训练集 进行训练+转换 算出一套数据
x_train = transfer.fit_transform(x_train)
#3.3 transform 直接转换即可 .不用在进行训练 因为是测试集
x_test = transfer.transform(x_test)
# 4.模型训练
# 4.1 实例化模型
# 参1 是否计算偏置 默认true 正规方程模型
model = LinearRegression(fit_intercept=True)
# 梯度下降方法
# 参1: 是否计算截距
# 参2: 学习率值设置:常量 固定
# 参3: 学习率值
# model=SGDRegressor(fit_intercept=True,learning_rate='constant',eta0=0.01)
# 4.2 模型训练
model.fit(x_train, y_train)
# 5.模型预测
y_predict = model.predict(x_test)
print(f"预测值为:{y_predict}")
print(f"权重:{model.coef_}")
print(f"偏置:{model.intercept_}")
# 6.模型评估
# MAE MSE RMSE
#参1:真实值 参2:预测值
'''
越小模型预测越准确
'''
print(f"MAE 平均绝对误差{mean_absolute_error(y_test, y_predict)}")
print('=' * 50)
print(f"MSE 均方误差{mean_squared_error(y_test, y_predict)}")
print('=' * 50)
print(f"RMSE 均方根误差{root_mean_squared_error(y_test, y_predict)}")
#如果没有这个方法root_mean_squared_error 可以采用如下方法解决问题
print(f"RMSE 均方根误差:{np.sqrt(mean_squared_error(y_test,y_predict))}") # 效果同上