• 数据挖掘-diabetes数据集分析-糖尿病病情预测_线性回归_最小平方回归


         [python] view plain copy print?在CODE上查看代码片派生到我的代码片
    1. # coding: utf-8    
    2. # 利用 diabetes数据集来学习线性回归  
    3. # diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况。   
    4. # 数据集中的特征值总共10项, 如下:  
    5.     # 年龄  
    6.     # 性别  
    7.     #体质指数  
    8.     #血压  
    9.     #s1,s2,s3,s4,s4,s6  (六种血清的化验数据)  
    10.     #但请注意,以上的数据是经过特殊处理, 10个数据中的每个都做了均值中心化处理,然后又用标准差乘以个体数量调整了数值范围。验证就会发现任何一列的所有数值平方和为1.   
    11.       
    12. #关于数据集更多的信息: http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html  
    13.    # http://scikit-learn.org/stable/datasets/index.html#datasets  
    14.      
    15. import numpy as np  
    16. from sklearn import datasets  
    17. diabetes=datasets.load_diabetes()  
    18. #查看第一列年龄的数据  
    19. diabetes.data[0]  
    20. #求证: 每一列的数值的平方和为1  
    21. np.sum( diabetes.data[:,0]**2)  #求年龄列  
    22. #糖尿病进展的数据  
    23. diabetes.target  #数值介于   25到346之间  
    24.   
    25. #切分训练集与测试集  
    26. #自动切分训练集太小了  
    27. #from sklearn.cross_validation import train_test_split  
    28. #x_train,x_test,y_train,y_test=train_test_split( diabetes.data,diabetes.target,random_state=14)  
    29. #所以换成手工切分  
    30. x_train=diabetes.data[:-20]  
    31. y_train=diabetes.target[:-20]  
    32. x_test=diabetes.data[-20:]  
    33. y_test=diabetes.target[-20:]  
    34.   
    35. #什么是回归呢? 回归的目的是预测数值型的目标值。最直接的办法是根据训练数据计算出一个求目标值的计算公式。假如你想预测一个地区的餐馆数量,可能会这么计算:  
    36. #     num = 0.002 * people + 0.001 * gpd  
    37. # 以上就是所谓的回归方程,其中的0.002, 0.001称作回归系数,求这些回归系数的过程就是回归。一旦求出了这些回归系数,再给定输入,做预测就简单了.   
    38. # 回归分为线性回归和非线性回归。 上面的公式描述的就是线性回归.   
    39.   
    40. #线性回归通过拟合线性模型的回归系数W =(w_1,…,w_p)来减少数据中观察到的结果和实际结果之间的残差平方和,并通过线性逼近进行预测。  
    41.   
    42. #scikit-learn库的线性回归预测模型通过fit(x,y)方法来训xaisaj型,其中x为数据的属性,y为所属的类型.线性模型的回归系数W会保存在它的coef_方法中.   
    43. from sklearn import linear_model  
    44. linreg=linear_model.LinearRegression()   #创建线性回归  
    45.   
    46. #用训练集训练模型  
    47. linreg.fit( x_train,y_train)  
    48. #调用预测模型的coef_属性,求出每种生理数据的回归系数b, 一共10个结果,分别对应10个生理特征.  
    49. linreg.coef_  
    50.   
    51. #在模型上调用predict()函数,传入测试集,得到预测值,  
    52. linreg.predict( x_test )  
    53. #结果:array([ 197.61846908,  155.43979328,  172.88665147,  111.53537279,  
    54.   #      164.80054784,  131.06954875,  259.12237761,  100.47935157,  
    55.   #      117.0601052 ,  124.30503555,  218.36632793,   61.19831284,  
    56.   #      132.25046751,  120.3332925 ,   52.54458691,  194.03798088,  
    57.   #      102.57139702,  123.56604987,  211.0346317 ,   52.60335674])  
    58.       
    59.   
    60. #查看实际目标值  
    61. y_test  
    62. #array([ 233.,   91.,  111.,  152.,  120.,   67.,  310.,   94.,  183.,  
    63. #         66.,  173.,   72.,   49.,   64.,   48.,  178.,  104.,  132.,  
    64. #        220.,   57.])  
    65.   
    66. #如何评价以上的模型优劣呢?我们可以引入方差,方差越接近于1,模型越好.   
    67. # 方差: 统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数  
    68. linreg.score( x_test,y_test)  
    69.   
    70.   
    71. #对每个特征绘制一个线性回归图表  
    72. import matplotlib.pyplot as plt  
    73. #matplot显示图例中的中文问题 :   https://www.zhihu.com/question/25404709/answer/67672003  
    74. import matplotlib.font_manager as fm  
    75. #mac中的字体问题请看: https://zhidao.baidu.com/question/161361596.html  
    76. myfont = fm.FontProperties(fname='/Library/Fonts/Xingkai.ttc')  
    77.   
    78.   
    79. plt.figure(  figsize=(8,12))  
    80. #循环10个特征  
    81. for f in range(0,10):  
    82.     #取出测试集中第f特征列的值, 这样取出来的数组变成一维的了,  
    83.     xi_test=x_test[:,f]  
    84.     #取出训练集中第f特征列的值  
    85.     xi_train=x_train[:,f]  
    86.       
    87.     #将一维数组转为二维的  
    88.     xi_test=xi_test[:,np.newaxis]  
    89.     xi_train=xi_train[:,np.newaxis]  
    90.       
    91.     plt.ylabel(u'病情数值',fontproperties=myfont)  
    92.     linreg.fit( xi_train,y_train)   #根据第f特征列进行训练  
    93.     y=linreg.predict( xi_test )       #根据上面训练的模型进行预测,得到预测结果y  
    94.       
    95.     #加入子图  
    96.     plt.subplot(5,2,f+1)   # 5表示10个图分为5行, 2表示每行2个图, f+1表示图的编号,可以使用这个编号控制这个图  
    97.     #绘制点   代表测试集的数据分布情况  
    98.     plt.scatter(  xi_test,y_test,color='k' )  
    99.     #绘制线  
    100.     plt.plot(xi_test,y,color='b',linewidth=3)  
    101.       
    102. plt.savefig('python_糖尿病数据集_预测病情_线性回归_最小平方回归.png')  
    103. plt.show() 
  • 相关阅读:
    分数序列规律求和
    猴子吃桃算法
    猴子吃桃算法
    完数
    完数
    数字个数依次叠加 s=a+aa+aaa+aaaa+aa...a
    数字个数依次叠加 s=a+aa+aaa+aaaa+aa...a
    hbase(二)Java操作 hbase
    hbase scan startrow endrow 是否包括
    ListOrderedMap和Map
  • 原文地址:https://www.cnblogs.com/yhl-yh/p/6714950.html
Copyright © 2020-2023  润新知