机器学习sklearn实战笔记(二)

线性回归

线性回归是监督学习中的一种方法,这次讲LinearRegression线性回归.

LinearRegression,顾名思义,是一种回归的方法.LinearRegression内部使用的是最小二乘法.

下面我们使用LinearRegression来预测糖尿病人的疾病情况.

基本步骤:
  1. 引入相关包

    from sklearn.linear_model import LinearRegression
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    
  2. 加载数据集

    sklearn加载数据集十分方便,datasets.loadxxx即可,本例中加载的是diabetes糖尿病病人的数据.

     # 加载数据集
     diabetes = datasets.load_diabetes()
    

    经过上一步代码我们已经成功加载了数据集,但对数据不了解怎么办?我们加载的数据到底是什么样子的呢?可以使用以下代码查看数据信息:

     print(diabetes.DESCR)
    

    DESCR属性中存放着数据集的一些基本信息,可以打印出来查看,该数据集的信息为:

     **Data Set Characteristics:**
       :Number of Instances: 442
       :Number of Attributes: First 10 columns are numeric predictive values
       :Target: Column 11 is a quantitative measure of disease progression one year after baseline
       :Attribute Information:
           - Age
           - Sex
           - Body mass index
           - Average blood pressure
           - S1
           - S2
           - S3
           - S4
           - S5
           - S6
     Note: Each of these 10 feature variables have been mean centered and scaled by the standard deviation times `n_samples` (i.e. the sum of squares of each column totals 1).
    

    可以很直观看到共有442行数据, 共有10个特征,并且每个特征代表的含义是什么都可以看到.

    有兴趣的话可以查看具体数据信息:数据信息

  3. 数据预处理

    1. 该数据集有10个特征,为了方便,在这里我们只选择一个特征进行研究.

      x = diabetes.data[:, np.newaxis, 2]  # 选出1个特征 (442, 1)
      y = diabetes.target  # 获得目标数据值
      

      diabetes.data 可以获得原始数据,类似二维数组(442, 10),共有442组数据,每组数据有10个特征
      diabetes.target 可以获每组数据对应的目标值.

    2. 对数据进行划分,分成训练集和测试集.将数据分成训练集和测试集可以有助于减小误差.在同样的数据上预测和测试是错误的行为.

      # 将数据划分为训练集和测试集
      x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42)
      
  4. 模型训练和预测

    # 创建线性回归模型
    clf = LinearRegression()
    # 用训练好的模型在测试集上预测
    y_pred = clf.predict(x_test)
    

    如果想使用别的模型来训练,只需修改成相应模型即可

  5. 模型评价

    # 打印模型的得分,进行模型评价
    print(clf.score(x_test, y_test))
    

    clf.score默认使用的是R2评分标准,评分在0-1之间,越大模型拟合越好

    结果: 0.3172099449537781 是一个很低的分数,说明该模型的拟合程度不是很好,结果可以通过图片直观反映出来.

    原因: 该数据共有10个特征,我们只选择了一组特征进行拟合训练,所以模型的效果不是很好也是情理之中的.

  6. 绘图

    # 绘图
    plt.scatter(x_test, y_test, color='black')  # 绘制散点图
    plt.plot(x_test, y_pred, color='blue', linewidth=3)  # 绘制直线 
    plt.xticks(()) # 去除横坐标
    plt.yticks(()) # 去除纵坐标
    plt.show()  # 显示图片
    

    结果图

    绘该步骤中,绘制图片的步骤也是十分有规律的:

    首先,绘制散点图为: plt.scatter 本例中散点代表着原本的数据
    其次,绘制直线图为: plt.plot 本例中直线代表着预测的值

    可以明显看出差异较大,拟合效果不是很好

以下是全部代码
# 线性回归
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split

# 加载数据集
diabetes = datasets.load_diabetes()
print(diabetes.DESCR)  # 打印出该数据集的基本信息

x = diabetes.data[:, np.newaxis, 2]  # 选出1个特征 (442, 1)
y = diabetes.target  # 目标数据值

# 将数据划分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42)

# 创建线性回归模型
clf = LinearRegression()

# 训练模型
clf.fit(x_train, y_train)

# 用训练好的模型在测试集上预测
y_pred = clf.predict(x_test)

# 打印模型的得分,进行模型评价
print(clf.score(x_test, y_test))

# 绘图
plt.scatter(x_test, y_test, color='black')
plt.plot(x_test, y_pred, color='blue', linewidth=3)
plt.xticks(())  # 去除横坐标
plt.yticks(())  # 去除纵坐标

plt.show()  # 显示图片

引用:

原例子出自:, sklearn官方文档,作者在修改了其中一部分内容.

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值