#2018-03-21 16:45:01 March Wednesday the 12 week, the 080 day SZ SSMR

数据挖掘学习笔记 5 线性回归知识及预测糖尿病实例 
  今天主要讲述的内容是关于一元线性回归的知识,Python实现,包括以下内容:
        1.机器学习常用数据集介绍
        2.什么是线性回归
        3.LinearRegression使用方法
        4.线性回归判断糖尿病
一. 数据集介绍

        1.diabetes dataset数据集
        数据集参考:http://scikit-learn.org/stable/datasets/
        这是一个糖尿病的数据集,主要包括442行数据,10个属性值,分别是:Age(年龄)、性别(Sex)、Body mass index(体质指数)、Average Blood Pressure(平均血压)、S1~S6一年后疾病级数指标。Target为一年后患疾病的定量指标。
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 27 02:37:05 2016

@author: yxz15
"""

from sklearn import datasets
diabetes = datasets.load_diabetes()                         #载入数据
print(diabetes.data)                                         #数据
print(diabetes.target)                                     #类标
print(u'总行数: ', len(diabetes.data), len(diabetes.target)) #数据总行数
print(u'特征数: ', len(diabetes.data[0]))                   #每行数据集维数
print(u'数据类型: ', diabetes.data.shape)                    #类型
print(type(diabetes.data), type(diabetes.target))           #数据集类型

二. 什么是线性回归

        1.机器学习简述
        机器学习(Machine Learning )包括:
        a.监督学习(Supervised Learning):回归(Regression)、分类(Classification)
        例:训练过程中知道结果。小孩给水果分类,给他苹果告诉他是苹果,反复训练学习。在给他说过,问他是什么?他回答准确,如果是桃子,他不能回答为苹果。

        b.无监督学习(Unsupervised Learning):聚类(Clustering)
        例:训练过程中不知道结果。给小孩一堆水果,如苹果、橘子、桃子,小孩开始不知道需要分类的水果是什么,让小孩对水果进行分类。分类完成后,给他一个苹果,小孩应该把它放到苹果堆中。


        c.增强学习(Reinforcement Learning)
        例:ML过程中,对行为做出评价,评价有正面的和负面两种。通过学习评价,程序应做出更好评价的行为。


        d.推荐系统(Recommender System)
2.斯坦福公开课:第二课 单变量线性回归
用预测房屋价格来解释
总的来说,线性回归主要包括一下四个部分,分别是Hypothesis、Parameters、Cost Function、Goal。右图位简化版,theta0赋值为0。
<3>梯度下降(Gradient descent)
 应用的场景之一最小值问题:
 3.一元回归模型
  <1>什么是线性回归?
  线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。[1]  
  4)分类(Classification)与回归(Regression)都属于监督学习,他们的区别在于:
               分类:用于预测有限的离散值,如是否得了癌症(0,1),或手写数字的判断,是0,1,2,3,4,5,6,7,8还是9等。分类中,预测的可能的结果是有限的,且提前给定的。
               回归:用于预测实数值,如给定了房子的面积,地段,和房间数,预测房子的价格。
三. LinearRegression线性回归使用方法
from sklearn import linear_model       #导入线性模型
regr = linear_model.LinearRegression() #使用线性回归
print(regr)



from sklearn import linear_model       #导入线性模型
import matplotlib.pyplot as plt        #绘图
import numpy as np

#X表示匹萨尺寸 Y表示匹萨价格
X = [[6], [8], [10], [14], [18]]
Y = [[7], [9], [13], [17.5], [18]]

print(u'数据集X: ', X)
print(u'数据集Y: ', Y)

#回归训练
clf = linear_model.LinearRegression() #使用线性回归
clf.fit(X, Y)                         #导入数据集
res = clf.predict(np.array([12]).reshape(-1, 1))[0] #预测结果
print(u'预测一张12英寸匹萨价格:$%.2f' % res)

#预测结果
X2 = [[0], [10], [14], [25]]
Y2 = clf.predict(X2)

#绘制线性回归图形
plt.figure()
plt.title(u'diameter-cost curver')   #标题
plt.xlabel(u'diameter')              #x轴坐标
plt.ylabel(u'cost')                  #y轴坐标
plt.axis([0, 25, 0, 25])             #区间
plt.grid(True)                       #显示网格
plt.plot(X, Y, 'k.')                 #绘制训练数据集散点图
plt.plot(X2, Y2, 'g-')               #绘制预测数据集直线
plt.show()

四. 线性回归判断糖尿病


from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model  
#数据集
diabetes = datasets.load_diabetes() #载入数据

#获取一个特征
diabetes_x_temp = diabetes.data[:, np.newaxis, 2] 

diabetes_x_train = diabetes_x_temp[:-20]   #训练样本
diabetes_x_test = diabetes_x_temp[-20:]    #测试样本 后20行
diabetes_y_train = diabetes.target[:-20]   #训练标记
diabetes_y_test = diabetes.target[-20:]    #预测对比标记

#回归训练及预测
clf = linear_model.LinearRegression()
clf.fit(diabetes_x_train, diabetes_y_train)  #注: 训练数据集

#系数 残差平法和 方差得分
print('Coefficients :\n', clf.coef_)
print ("Residual sum of square: %.2f" %np.mean((clf.predict(diabetes_x_test) - diabetes_y_test) ** 2))
print ("variance score: %.2f" % clf.score(diabetes_x_test, diabetes_y_test))

#绘图
plt.title(u'LinearRegression Diabetes')   #标题
plt.xlabel(u'Attributes')                 #x轴坐标
plt.ylabel(u'Measure of disease')         #y轴坐标
#点的准确位置
plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black')
#预测结果 直线表示
plt.plot(diabetes_x_test, clf.predict(diabetes_x_test), color='blue', linewidth = 3)
plt.show()