转载: scikit-learn学习之回归分析

时间:2022-10-31 15:13:33

版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <——

目录(?)[+]

======================================================================
本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正

======================================================================

另外一篇基于《机器学习实战》的Logistic回归分析的博客请参考:点击阅读,其主要是采用Python代码实现回归模型

还有一篇是纯实战案例博客请参考 ,Logistic回归模型案例实战:《机器学习实战》Logistic回归算法(2)

目录:

1、概念

2、简单线性回归(Simple Liner Regession)

3、多元性回归(Mutiple Regession)

4、非线性回归(Logistic Regession)

一:概念

1:集中趋势衡量

        1.1均值(平均值,平均数)(mean)
        1.2中位数(median):将数据中的所有数按大小排列顺序,位于中间的拿个书就是中位数
                个数为奇数,取中间值
                个数为偶数,取中间两个数的平均值
        1.3众数:数据中出现最多的数

2:离散程度的衡量

        2.1方差(variance)
        2.2标准差(standard deviation)

3:回归中的相关度

     3.1:皮尔逊相关度
     衡量两个相关强度的量,取值范围是[-1,1],计算公式为:
转载: scikit-learn学习之回归分析

4:R平方值

决定系数(可决系数,拟合优度),反应因变量的全部变异能通过回归关系被自变量解释的比例,取值范围[0,1],可决系数越大,说明在总变差中由模型作出了解释的部分占的比重越大,模型拟合优度越好。反之可决系数小,说明模型对样本观测值的拟合程度越差。
描述:如R平方为0.8,则表示回归关系可以解释因变量80%的变异,换句话说,如果我们能控制自变量不变,则因变量变异程度将会减少80%
对于 简单线性回归来说,R^2= r * r
对于多元线性回归来说,
转载: scikit-learn学习之回归分析
SSR表示由模型引起的误差平方和,SST表示由实际值引起的差值平方和
 
R平方也有局限性,会随着自变量的增大而增大
一个关于相关系数的BBS:http://bbs.pinggu.org/thread-3034786-1-1.html

5:皮尔逊相关系数和R平方值计算示例

  1. #coding:utf-8
  2. '''''
  3. Created on 2015年11月8日
  4. @author: Administrator
  5. '''
  6. import numpy as np
  7. import math
  8. #求解皮尔逊相关系数
  9. def computeCorrelation(X, Y):
  10. xBar = np.mean(X)
  11. yBar = np.mean(Y)
  12. SSR = 0
  13. varX = 0
  14. varY = 0
  15. for i in range(0, len(X)):
  16. #对应分子部分
  17. diffXXBar = X[i] - xBar
  18. diffYYBar = Y[i] - yBar
  19. SSR +=(diffXXBar * diffYYBar)
  20. #对应分母求和部分
  21. varX += diffXXBar**2
  22. varY += diffYYBar**2
  23. SST = math.sqrt(varX * varY)
  24. return SSR/SST
  25. def polyfit(x, y, degree):
  26. results = {}
  27. #coeffs 为相关系数,x自变量,y因变量,degree为最高幂
  28. coeffs = np.polyfit(x, y, degree)
  29. #定义一个字典存放值,值为相关系数list
  30. results['polynomial'] = coeffs.tolist()
  31. #p相当于直线方程
  32. p = np.poly1d(coeffs)
  33. yhat = p(x)  #传入x,计算预测值为yhat
  34. ybar = np.sum(y)/len(y)  #计算均值
  35. #对应公式
  36. ssreg = np.sum((yhat - ybar) ** 2)
  37. sstot = np.sum((y - ybar) ** 2)
  38. results['determination'] = ssreg / sstot
  39. print" results :",results
  40. return results
  41. testX = [1, 3, 8, 7, 9]
  42. testY = [10, 12, 24, 21, 34]
  43. #输出的是简单线性回归的皮尔逊相关度和R平方值
  44. print "r : ",computeCorrelation(testX, testY)
  45. print "r^2 : ",str(computeCorrelation(testX, testY)**2)
  46. #
  47. print polyfit(testX, testY, 1)["determination"]

结果显示为:

转载: scikit-learn学习之回归分析

二:简单线性回归

1:回归与分类的区别

       回归(regession):Y变量为连续型数值,如房价,人数,降雨量
       分类(classification):Y变量为类别型,如颜色类别,电脑品牌,有无信誉

2:简单线性回归介绍

       回归分析:是指建立方程模拟两个或者多个变量之间如何关联
       回归模型:是指被用来描述因变量(y)和自变量(x)以及偏差(error)之间的关系的方程,函数表示为:
                       转载: scikit-learn学习之回归分析
       简单线性回归方程:模型转变为转载: scikit-learn学习之回归分析即为回归方程(类似于一条直线,参数为斜率和y轴的交点)
       线性关系包含:正相关,负相关,无关
       估计线性方程:
                       转载: scikit-learn学习之回归分析
       关于偏差:
转载: scikit-learn学习之回归分析

3:简单线性回归示例

  1. <span style="font-family:Microsoft YaHei;"><span style="font-size:18px;">#coding:utf8
  2. '''''
  3. Created on 2016年4月24日
  4. @author: Gamer Think
  5. '''
  6. #Simple Regession
  7. import numpy as np
  8. #周广告播放数量
  9. x = [1,3,2,1,3]
  10. #周汽车销售数据
  11. y = [14,24,18,17,27]
  12. #使用最小二乘法
  13. def fitSLR(x,y):
  14. n = len(x)
  15. denominator  = 0
  16. numerator = 0
  17. for i in range(0,n):
  18. numerator += (x[i]-np.mean(x)* (y[i]-np.mean(y)) )
  19. denominator += (x[i]-np.mean(x))**2
  20. print "denominator:",denominator
  21. print "numerator:",numerator
  22. b1 = numerator/float(denominator)
  23. #     b0 = np.mean(y)/float(np.mean(x))
  24. b0 = np.mean(y)-b1*np.mean(x)
  25. return b0,b1
  26. def predict(b0,b1,x):
  27. return b0+b1*x
  28. b0,b1 = fitSLR(x,y)
  29. x_test = 6
  30. print "y_test:",predict(b0,b1,x_test)</span></span>

三:多元性回归

1:多元回归简介
        与简单线性回归的区别:有多个变量x
        多元回归模型:
转载: scikit-learn学习之回归分析
多元回归方程:
转载: scikit-learn学习之回归分析
估计多元回归方程:(y变成y_hat,即求得是估计值)
转载: scikit-learn学习之回归分析
估计方法:
转载: scikit-learn学习之回归分析
2:多元线性回归示例

                                                               转载: scikit-learn学习之回归分析
                     我们需要的数据是第二,三,四列的数据
转载: scikit-learn学习之回归分析
 
  1. <span style="font-family:Microsoft YaHei;"><span style="font-size:18px;">#coding:utf-8
  2. '''''
  3. Created on 2016年4月24日
  4. @author: Gamer Think
  5. '''
  6. from sklearn import linear_model
  7. import numpy as np
  8. from numpy import genfromtxt #可以将非array格式的list转化为array
  9. datapath = "data.csv"
  10. deliverData = genfromtxt(datapath,delimiter=",") #将csv文件转化为numpy.array格式
  11. print "data:",deliverData
  12. X= deliverData[:,:-1]
  13. Y = deliverData[:,-1]
  14. print "X:",X
  15. print "Y:",Y
  16. regr = linear_model.LinearRegression()
  17. regr.fit(X,Y)
  18. print "coefficients:",regr.coef_        #与X结合的值
  19. print "intercept:",regr.intercept_         #类似于截距
  20. x_pre = [102,6]
  21. y_pre = regr.predict(x_pre)
  22. print "Y-Predict:",y_pre
  23. </span></span>

3:如果自变量中有分类型变量(categorical data),如何处理?
     e g:
              转载: scikit-learn学习之回归分析
               首先将分类型变量进行转化为如下形式(第四五六列表示0,1,2,为1表示使用该型号车)
             转载: scikit-learn学习之回归分析
             调用的代码其实和上边的是一样的:
  1. <span style="font-family:Microsoft YaHei;"><span style="font-family:Microsoft YaHei;font-size:18px;">#coding:utf-8
  2. '''''
  3. Created on 2016年4月24日
  4. @author: Gamer Think
  5. '''
  6. from numpy import genfromtxt
  7. import numpy as np
  8. from sklearn import datasets, linear_model
  9. dataPath = "dataDumpy.csv"
  10. deleveryData = genfromtxt(dataPath, delimiter=',')
  11. print "data:\n",deleveryData
  12. X = deleveryData[:, :-1]
  13. Y = deleveryData[:, -1]
  14. print "X: ",X
  15. print "Y: ",Y
  16. regr = linear_model.LinearRegression()
  17. regr.fit(X, Y)
  18. print "Coefficients:",regr.coef_  #与X结合的值
  19. print "Intercept:",regr.intercept_ #类似于截距
  20. #
  21. xPred = [102,6,0,0,1]
  22. yPred = regr.predict(xPred)
  23. print "predict y : ",yPred</span></span>

4:关于误差

转载: scikit-learn学习之回归分析
 

四:非线性回归

非线性回归又称为逻辑回归

1:概率

     对一件事情发生可能性的衡量,取值范围是0~1,计算方法包括,个人置信,历史数据,模拟数据
     条件概率:
转载: scikit-learn学习之回归分析
   转载: scikit-learn学习之回归分析
转载: scikit-learn学习之回归分析
转载: scikit-learn学习之回归分析
转载: scikit-learn学习之回归分析

非线性回归实例:

  1. <span style="font-family:Microsoft YaHei;"><span style="font-size:18px;">#coding:utf-8
  2. '''''
  3. Created on 2016年4月24日
  4. @author: Gamer Think
  5. '''
  6. import numpy as np
  7. import random
  8. '''''
  9. 梯度下降算法
  10. 参数说明:X,Y
  11. theta:一组向量和x相乘的一组值
  12. alpha:梯度下降时的参数,即每一步下降多少
  13. m:实例的个数
  14. numIteration:迭代计算的次数,可以理解为梯度下降多少步
  15. '''
  16. def gradientDescent(X,Y,theta,alpha,m,numIteration):
  17. x_trains = X.transpose()  #X的转置矩阵
  18. for i in range(0,numIteration):
  19. hypothesis = np.dot(X,theta)      #内积形式,X与theta的乘积  ,求出y的估计值
  20. loss = hypothesis - Y             #估计值与真实值之间的差
  21. #通用的梯度下降算法,和logistic Regession中所描述的cost函数不一致
  22. cos = np.sum(loss**2)/(2*m)
  23. print "Iteration %d | Cost:%f" % (i,cos)
  24. gradient = np.dot(x_trains,loss)/m
  25. theta = theta - alpha*gradient
  26. return theta
  27. '''''
  28. numPoints : 点的个数
  29. bias :偏好ֵ
  30. variance : 统计学概念, 偏差和
  31. 产生样本点和对应的标签
  32. '''
  33. def genData(numPoints,bias,variance):
  34. X = np.zeros(shape=(numPoints,2))     #归类的数据
  35. Y = np.zeros(shape=numPoints)         #归类的标签
  36. for i in range(0,numPoints):   #从0~len(numPoints)-1执行如下
  37. X[i][0] = 1
  38. X[i][1] = i
  39. #制造target数据
  40. Y[i] = (i+bias) + random.uniform(0,1)*variance
  41. return X,Y
  42. X,Y = genData(100, 25, 10)
  43. # print  "X:",X
  44. # print  "Y:",Y
  45. m, n = np.shape(X)
  46. n_y = np.shape(Y)
  47. # print "x shape :", m, "  ", n
  48. # print "y length :",n_y
  49. numIterations =100000
  50. alpha = 0.0005
  51. theta = np.ones(n)
  52. theta = gradientDescent(X, Y, theta, alpha, m, numIterations)
  53. print "theta: " ,theta
  54. </span></span>
转载: scikit-learn学习之回归分析

点击 进入个人在有道云笔记的回归分析相关,感兴趣的可以看一下

转载: scikit-learn学习之回归分析的更多相关文章

  1. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...

  2. Scikit Learn&colon; 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  3. scikit learn 模块 调参 pipeline&plus;girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  4. &lpar;原创&rpar;(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  5. &lpar;原创&rpar;(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  6. 转载-《Python学习手册》读书笔记

    转载-<Python学习手册>读书笔记 http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html

  7. &lbrack;ML学习笔记&rsqb; 回归分析(Regression Analysis)

    [ML学习笔记] 回归分析(Regression Analysis) 回归分析:在一系列已知自变量与因变量之间相关关系的基础上,建立变量之间的回归方程,把回归方程作为算法模型,实现对新自变量得出因变量 ...

  8. Learning How to Learn学习笔记(转)

    add by zhj: 工作中提高自己水平的最重要的一点是——快速的学习能力.这篇文章就是探讨这个问题的,掌握了快速学习能力的规律,你自然就有了快速学习能力了. 原文:Learning How to ...

  9. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

随机推荐

  1. MySQL 使用笔记(一) 关联

    2016-12-16 一.当前未掌握总结: 目前MySQL中不会的内容: 1.临时表(变量表) 2.存储过程 3.游标 4.函数 二.关联 内联.左关联.右关联.外联 (一).标准sql语句中的关联及 ...

  2. Eclipse 扩展点常量ID

    eclipse 扩展点常量ID 列表如下: Name    ID ------------------------------------------------- Category File     ...

  3. Spark实战3&colon;Maven&lowbar;Java&lowbar;HelloWorld

    Spark独立开发应用( Java语言) 1 创建SimpleApp.java文件: /* SimpleApp.java */ import org.apache.spark.api.java.*; ...

  4. python&lpar;六&rpar;面向对象

    1.封装 支持多重继承,但如果不需要的时候最好不要使用,避免出现不必要的bug: 2.继承 3.多态 4.构造函数 5.私有和共有 在属性前写两个下滑线定义就是私有的

  5. Exporter - 实现默认的导入方法用于模块

    Exporter - 实现默认的导入方法用于模块 简介: In module YourModule.pm: package YourModule; require Exporter; @ISA = q ...

  6. UVa 340 Master-Mind Hints &lpar;优化查找&amp&semi;复制数组&rpar;

    340 - Master-Mind Hints Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_on ...

  7. 自动化测试培训:qtp脚本获取获取汇率数据

    poptest(www.poptest.cn)致力于测试开发工程师的培训,以培养能胜任做测试工具开发,完成自动化测试,性能测试,安全性测试等工作能力为目标.自8月份成立2个月内中针对企业在职人员的能力 ...

  8. 是程序员,就用python导出pdf

    这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊. ...

  9. 工具类封装之--CommonUtils

    /** * @file_name : CommonUtils.java * @author : * @date : 2018年3月15日 * Description: */ package cn.xx ...

  10. TemplatePart特性的作用

    看wp控件的源代码时发现TemplatePart特性,于是在百度上查了查: http://blog.csdn.net/wushang923/article/details/9224533 Templa ...