sklearn学习——Python预测糖尿病人是否患癌症(Linear Regression)

分类(Classification)与回归(Regression)都属于监督学习,他们的区别在于:

分类:用于预测有限的离散值,如是否得了癌症(0,1),或手写数字的判断,是0,1,2,3,4,5,6,7,8还是9等。分类中,预测的可能的结果是有限的,且提前给定的。

回归:用于预测实数值,如给定了房子的面积,地段,和房间数,预测房子的价格。

LinearRegression 拟合一个带有系数 w = (w1, …, wp) 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。
其数学表达式为:

在这里插入图片描述

  1. 进行预测前查看一下数据集
    https://scikit-learn.org/stable/datasets/index.html#diabetes-dataset

    在这里插入图片描述
    diabetes数据集,这是一个糖尿病的数据集,主要包括442行数据,10个属性值,分别是:Age(年龄)、性别(Sex)、Body mass index(体质指数)、Average Blood Pressure(平均血压)、S1~S6一年后疾病级数指标。Target为一年后患疾病的定量指标。

  2. 进行预测
    fit(x, y): 训练。分析模型参数,填充数据集。其中x为特征,y位标记或类属性。

    predict(): 预测。它通过fit()算出的模型参数构成的模型,对解释变量进行预测其类属性。预测方法将返回预测值y_pred。

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets, linear_model
    
    # 从sklearn中导入数据
    diabetes = datasets.load_diabetes()
    # 选择其中一种属性,按照二维数组输出
    diabetes_x = diabetes.data[:, np.newaxis, 2]
    # 将数据分成训练集和测试集
    # 测试集为后20行,其他的为训练集
    diabetes_x_train = diabetes_x[:-20]
    diabetes_x_test = diabetes_x[-20:]
    # 将定量指标分为训练集和测试集
    diabetes_y_train = diabetes.target[:-20]
    diabetes_y_test = diabetes.target[-20:]
    
    # 通过fit(x,y)方法训练模型
    regr = linear_model.LinearRegression()
    regr.fit(diabetes_x_train, diabetes_y_train)
    
    # 线性系数w
    print("coefficient = %f\n" % float(regr.coef_))
    # 残差平方和
    print("Residual sum of squares: %.2f" % np.mean((regr.predict(diabetes_x_test) - diabetes_y_test) ** 2))
    # 确定系数:1为完美预测
    print("Coefficient of determination: %.2f" % regr.score(diabetes_x_test, diabetes_y_test))
    
    # u代表Unicode编码,增加fontproperties属性可直接显示中文
    # eg:plt.title(u"例子", fontproperties="SimHei")
    plt.title(u"LinearRegression Diabetes")
    plt.xlabel(u"Attributes")
    plt.ylabel(u"Measure of disease")
    
    # 点的准确位置
    plt.scatter(diabetes_x_test, diabetes_y_test, color="red")
    # 预测结果
    plt.plot(diabetes_x_test, regr.predict(diabetes_x_test), color="blue")
    
    plt.show()
    
    

    输出结果:

    coefficient = 938.237861
    
    Residual sum of squares: 2548.07
    Coefficient of determination: 0.47
    
    

    在这里插入图片描述

  3. 模型优化,增加了斜率、 截距的计算,同时增加了点图到线性方程的距离,保存图片设置像素。

    扫描二维码关注公众号,回复: 11238599 查看本文章
    from sklearn import datasets
    import numpy as np
    from sklearn import linear_model
    import matplotlib.pyplot as plt
    
    # 从sklearn中导入数据
    diabetes = datasets.load_diabetes()
    diabetes_x = diabetes.data[:, np.newaxis, 2]
    diabetes_x_train = diabetes_x[:-20]
    diabetes_x_test = diabetes_x[-20:]
    diabetes_y_train = diabetes.target[:-20]
    diabetes_y_test = diabetes.target[-20:]
    
    # 通过fit(x,y)方法训练模型
    regr = linear_model.LinearRegression()
    regr.fit(diabetes_x_train, diabetes_y_train)
    
    # 查看预测结果和真实结果
    diabetes_x_pre = regr.predict(diabetes_x_test)
    print('预测结果')
    print(diabetes_x_pre)
    print('真实结果')
    print(diabetes_y_test)
    
    print('线性系数w:', regr.coef_)
    # 确定系数:1为完美预测
    print('确定系数:', regr.score(diabetes_x_test, diabetes_y_test))
    
    plt.title(u"LinearRegression Diabetes")
    plt.xlabel(u"Attributes")
    plt.ylabel(u"Measure of disease")
    
    # 点的准确位置
    # k, g, r为color
    # .是点型参数(markers)
    plt.plot(diabetes_x_test, diabetes_y_test, 'k.')
    # 预测结果
    plt.plot(diabetes_x_test, diabetes_x_pre, 'g')
    # 真实结果到预测结果的距离
    for idx, m in enumerate(diabetes_x_test):
        plt.plot([m, m], [diabetes_y_test[idx], diabetes_x_pre[idx]], 'r-')
    
    # 保存图片,设置像素
    plt.savefig('Diabetes.png', dpi=300)
    
    plt.show()
    
    

    输出结果:

    预测结果
    [225.9732401  115.74763374 163.27610621 114.73638965 120.80385422
     158.21988574 236.08568105 121.81509832  99.56772822 123.83758651
     204.73711411  96.53399594 154.17490936 130.91629517  83.3878227
     171.36605897 137.99500384 137.99500384 189.56845268  84.3990668 ]
    真实结果
    [233.  91. 111. 152. 120.  67. 310.  94. 183.  66. 173.  72.  49.  64.
      48. 178. 104. 132. 220.  57.]
    线性系数w: [938.23786125]
    确定系数: 0.47257544798227136
    

    在这里插入图片描述

参考:
https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py

https://www.ipieuvre.com/course/260

http://www.scikitlearn.com.cn/0.21.3/2/#111-%E6%99%AE%E9%80%9A%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95

猜你喜欢

转载自blog.csdn.net/narutodzx/article/details/105947851
今日推荐