机器学习[6]-单变量线性回归的学习

单变量从统计学的角度为仅有一个自变量和一个因变量,从机器学习的角度为仅有一个特征变量和一个目标变量。

使用最小二乘法求得一元线性函数的系数和截距项。

评价指标有平均绝对值差(MAE)、均方误差(MSE,与成本函数比较相近)、均方根误差(RMSE)、拟合优度(R^{2})。

以波士顿房屋价格的拟合与预测为例,简要说明单变量线性回归的使用:

# -*- 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()

原始数据散点图和预测效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值