重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

简单线性回归-创新互联

协方差:两个变量总体误差的期望。

创新互联建站专注于企业营销型网站、网站重做改版、当涂网站定制设计、自适应品牌网站建设、H5场景定制商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为当涂等各大城市提供网站开发制作服务。

简单的说就是度量Y和X之间关系的方向和强度。

X :预测变量
Y :响应变量

简单线性回归

 Y和X的协方差:[来度量各个维度偏离其均值的程度]

简单线性回归

备注:[之所以除以n-1而不是除以n,是因为这样能使我们以较小的样本集更好的逼近总体的协方差,即统计上所谓的“无偏估计”。而方差则仅仅是标准差的平方]

 如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),
 如果结果为负值就说明负相关的
 如果为0,也是就是统计上说的“相互独立”

为什么呢:

 简单线性回归

 如果第1,3象限点位多,最终的和就是正,X增大Y增大
 如果第2,4象限点位多,最终的和就是负,X增大Y减小

Cov(Y,X)会受到度量单位的影响

引入相关系数:

简单线性回归

简单线性回归

python使用以下公式进行计算[上面的公式不便于编程,需要多次扫描数据,但是微小的错误会被放大哦]:

简单线性回归

#coding:utf-8
'''
Y和X的相关系数就是标准化后变量的协方差
'''
'''
__author__ = 'similarface'
QQ:841196883@qq.com
'''
from math import sqrt
from pandas import *
import pandas as pd
import os,sys
import matplotlib.pyplot as plt
#安装不了 就github下载源码安装
from sklearn import datasets, linear_model

'''
根据文件加载数据
'''
def loaddataInTab(filename):
    if os.path.isfile(filename):
        try:
            return pd.read_table(filename)
        except Exception,e:
            print(e.message)
    else:
        print("文件存在!")
        return None
'''
获取Y,X的相关系数,即为:皮尔逊相关系数
'''
def pearson(rating1, rating2):
    '''
    皮尔逊相关参数
    在统计学中,皮尔逊积矩相关系数
    (英语:Pearson product-moment correlation coefficient,
    又称作 PPMCC或PCCs[1],
    文章中常用r或Pearson's r表示)
    用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。
    在自然科学领域中,该系数广泛用于度量两个变量之间的相关程度。
    0.8-1.0 极强相关
    0.6-0.8 强相关
    0.4-0.6 中等程度相关
    0.2-0.4 弱相关
    0.0-0.2 极弱相关或无相关
    '''
    sum_xy, sum_x, sum_y, sum_x2, sum_y2, n = 0, 0, 0, 0, 0, 0
    for i in xrange(len(rating1)):
            n = n + 1
            x = rating1[i]
            y = rating2[i]
            sum_xy += x * y
            sum_x += x
            sum_y += y
            sum_x2 += x ** 2
            sum_y2 += y ** 2
    if n == 0:
        return 0
    fenmu = sqrt(sum_x2 - (sum_x ** 2) / n) * sqrt(sum_y2 - (sum_y ** 2) / n)
    if fenmu == 0:
        return 0
    else:
        return (sum_xy - (sum_x * sum_y) / n) / fenmu

data=loaddataInTab('./AnscombeQuartet')

#x1,y1是线性相关的
diabetes_x1_test=data['X1']
diabetes_y1_test=data['Y1']
plt.scatter(diabetes_x1_test, diabetes_y1_test,  color='black')
print("黑色点的相关系数为:{}(皮尔逊相关参数)".format(pearson(diabetes_x1_test,diabetes_y1_test)))

regr1 = linear_model.LinearRegression()
diabetes_x1_train=diabetes_x1_test.as_matrix()[:, np.newaxis]
diabetes_y1_train=diabetes_y1_test.as_matrix()[:, np.newaxis]
regr1.fit(diabetes_x1_train, diabetes_y1_train)
plt.plot(diabetes_x1_test.as_matrix()[:, np.newaxis], regr1.predict(diabetes_x1_test.as_matrix()[:, np.newaxis]), color='black',linewidth=6)

#x2,y2是非线性 二次函数拟合
diabetes_x2_test=data['X2']
diabetes_y2_test=data['Y2']
plt.scatter(diabetes_x2_test, diabetes_y2_test,  color='red')
print("红色点的相关系数为:{}(皮尔逊相关参数)".format(pearson(diabetes_x2_test,diabetes_y2_test)))

regr2 = linear_model.LinearRegression()
diabetes_x2_train=diabetes_x2_test.as_matrix()[:, np.newaxis]
diabetes_y2_train=diabetes_y2_test.as_matrix()[:, np.newaxis]
regr2.fit(diabetes_x2_train, diabetes_y2_train)
plt.plot(diabetes_x2_test.as_matrix()[:, np.newaxis], regr2.predict(diabetes_x2_test.as_matrix()[:, np.newaxis]), color='red',linewidth=4)

#x3,y3 数据对中出现了 孤立点
diabetes_x3_test=data['X3']
diabetes_y3_test=data['Y3']
plt.scatter(diabetes_x3_test, diabetes_y3_test,  color='blue')
print("蓝色点的相关系数为:{}(皮尔逊相关参数)".format(pearson(diabetes_x3_test,diabetes_y3_test)))

regr3 = linear_model.LinearRegression()
diabetes_x3_train=diabetes_x3_test.as_matrix()[:, np.newaxis]
diabetes_y3_train=diabetes_y3_test.as_matrix()[:, np.newaxis]
regr3.fit(diabetes_x3_train, diabetes_y3_train)
plt.plot(diabetes_x3_test.as_matrix()[:, np.newaxis], regr3.predict(diabetes_x3_test.as_matrix()[:, np.newaxis]), color='blue',linewidth=2)


#x4,y4不适合线性拟合 极端值确立了直线
diabetes_x4_test=data['X4']
diabetes_y4_test=data['Y4']
plt.scatter(diabetes_x4_test, diabetes_y4_test,  color='green')
print("绿色点的相关系数为:{}(皮尔逊相关参数)".format(pearson(diabetes_x4_test,diabetes_y4_test)))
regr4 = linear_model.LinearRegression()
diabetes_x4_train=diabetes_x4_test.as_matrix()[:, np.newaxis]
diabetes_y4_train=diabetes_y4_test.as_matrix()[:, np.newaxis]
regr4.fit(diabetes_x4_train, diabetes_y4_train)
plt.plot(diabetes_x4_test.as_matrix()[:, np.newaxis], regr4.predict(diabetes_x4_test.as_matrix()[:, np.newaxis]), color='green',linewidth=1)

plt.xticks(())
plt.yticks(())
plt.show()


'''
把上面的4组数据去做线性回归:
有图可知都做出了,斜率和截距相等的拟合线性

4种X,Y的相关系数都很接近
在解释相关系数之前,图像点位的散点分布是很重要的
如果完全基于相关系数分析数据,将无法发现数据构造模式之间的差别
'''

简单线性回归

参考数据:

1

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:简单线性回归-创新互联
转载源于:http://cqcxhl.cn/article/cccpog.html