单变量从统计学的角度为仅有一个自变量和一个因变量,从机器学习的角度为仅有一个特征变量和一个目标变量。
使用最小二乘法求得一元线性函数的系数和截距项。
评价指标有平均绝对值差(MAE)、均方误差(MSE,与成本函数比较相近)、均方根误差(RMSE)、拟合优度()。
以波士顿房屋价格的拟合与预测为例,简要说明单变量线性回归的使用:
# -*- coding: utf-8 -*
# 以波士顿房屋价格为例演示单变量线性回归
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics # 评价模块
def main():
boston = load_boston() # 读取数据
print(boston.keys()) # 数据中包含的内容
print(boston.feature_names) # data变量名
bos = pd.DataFrame(boston.data) # 将data数据转换为DataFrame格式以便展示
print(bos[5].head()) # 第6列数据为RM(房间数量)
bos_target = pd.DataFrame(boston.target) # MEDV(房价)
print(bos_target.head())
# 散点图显示
x = bos.iloc[:, 5:6]
y = bos_target
plt.scatter(x, y)
plt.grid(True)
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.title('the relationship between RM and MEDV')
plt.show()
# 转成数组形式,便于计算
x = np.array(x.values)
y = np.array(y.values)
print(x)
print(y)
# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
# 训练,打印截距和系数
lr = LinearRegression()
lr.fit(x_train, y_train)
print(lr.intercept_)
print(lr.coef_)
# 使用模型进行预测
y_pred = lr.predict(x_test)
# 模型评价,作图
t = np.arange(len(x_test))
plt.plot(t, y_test, color='red', linewidth=1.0, linestyle='-', label='y_test')
plt.plot(t, y_pred, color='green', linewidth=1.0, linestyle='-', label='y_pred')
plt.legend()
plt.grid(True)
plt.show()
# 模型评价,指标计算
r2 = lr.score(x_test, y_test)
mae = metrics.mean_absolute_error(y_test, y_pred)
mse = metrics.mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
print('r2 = ', r2)
print('mae = ', mae)
print('mse = ', mse)
print('rmse = ', rmse)
if __name__ == '__main__':
main()
原始数据散点图和预测效果如下: