sklearn线性回归实例

线性回归

本示例仅使用糖尿病数据集的一个特征,以此来阐述二维图中的线性回归。 可以在图中看到预测的回归直线,显示了线性回归如何尝试绘制一条直线,该直线将最大程度地减少数据集中观察到的响应与通过线性近似预测的响应之间的残差平方和。不仅如此,本例还计算了系数,残差平方和和决定系数。

数据集介绍

本次案例采用sklearn中的diabetes数据集, diabetes是一个关于糖尿病的数据集,包括442个病人的生理数据及一年后的病情发展状况。

diabetes数据集中包含442个样本,每个样本包含10个特征,分别是:
(年龄,性别,体质指数,血压,s1,s2,s3,s4,s5,s6)
s1~s6分别是6种血清化验数据。
想了解更多关于diabetes数据集可以去 diabetes了解更多

现在可以上代码了:

# @Author: coderdz
# @Site: github.com/dingzhen7186
# @Time: 2020.09.22
# @Description: Linear Regression Example

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# return_X_y=True表示不再返回Bunch对象,而是返回其data和target的ndarray对象
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y = True)
# (442, 10) , (442, ), diabetes_X含有10个特征

# 只使用一个特征
# 使用np.newaxis将第三号特征选择后并多加了一个维度
diabetes_X = diabetes_X[:, np.newaxis, 2] # (442, 1)

# 数据集划分为训练集和测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

# 把预测的目标划分为训练集和测试集
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]

# 创建线性回归对象
regr = linear_model.LinearRegression()

# 用测试集训练模型
regr.fit(diabetes_X_train, diabetes_y_train)

# 使用测试集进行预测
diabetes_y_pred = regr.predict(diabetes_X_test) # type:ndarray

# 系数的值
print('Coefficients: \n', regr.coef_)
# 均方误差
print('Mean squared error: %.2f' % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# r2决定系数: 1是完美预测,模型效果越好越接近1,效果越差越接近0
print('Coefficient of determinatino: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))

# 画图展示
plt.scatter(diabetes_X_test, diabetes_y_test, color = 'black')
plt.plot(diabetes_X_test, diabetes_y_pred, color = 'blue', linewidth = 3)

plt.xticks(())
plt.yticks(())

plt.show()

输出如下:

Coefficients:
 [938.23786125]
Mean squared error: 2548.07
Coefficient of determinatino: 0.47

在这里插入图片描述

sklearn模型评估损失误差

  • sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)

    均方误差回归损失函数,通过传递预测值和真实值来评估误差,返回一个float型数值或者 ndarray,误差越小模型训练效果越好,最好是0.0

    squared: 如果为True,返回均方误差MSE值;如果为False,返回均方根误差RMSE值。
    multioutput: 默认为’uniform_average’,表示计算所有元素均方误差,返回一个标量。'raw_values’表示返回完整的误差集合。

    示例

    >>> from sklearn.metrics import mean_squared_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> mean_squared_error(y_true, y_pred)
    0.375
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> mean_squared_error(y_true, y_pred, squared=False)
    0.612...
    >>> y_true = [[0.5, 1],[-1, 1],[7, -6]]
    >>> y_pred = [[0, 2],[-1, 2],[8, -5]]
    >>> mean_squared_error(y_true, y_pred)
    0.708...
    >>> mean_squared_error(y_true, y_pred, squared=False)
    0.822...
    >>> mean_squared_error(y_true, y_pred, multioutput='raw_values')
    array([0.41666667, 1.        ])
    >>> mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])
    0.825...
    
  • sklearn.metrics.r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

    r2决定系数: 1是完美预测,模型效果越好越接近1, 模型如果很差的话甚至可能是负数,返回一个float型数值或 ndarray

    示例:

    >>> from sklearn.metrics import r2_score
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> r2_score(y_true, y_pred)
    0.948...
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> r2_score(y_true, y_pred,
    ...          multioutput='variance_weighted')
    0.938...
    >>> y_true = [1, 2, 3]
    >>> y_pred = [1, 2, 3]
    >>> r2_score(y_true, y_pred)
    1.0
    >>> y_true = [1, 2, 3]
    >>> y_pred = [2, 2, 2]
    >>> r2_score(y_true, y_pred)
    0.0
    >>> y_true = [1, 2, 3]
    >>> y_pred = [3, 2, 1]
    >>> r2_score(y_true, y_pred)
    -3.0
    

    继续学习中,加油啊!

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值