简单线性回归截距假设检验_机器学习(入门)-简单线性回归

机器学习入门:① 提出问题 ② 理解数据 ③ 数据清洗 ④ 构建模型 ⑤ 评估

python机器学习包:sklearn

一、相关性分析

相关性分析:研究2种或2种以上的数据之间有什么关系。比如身高和体重,工作和疾病发病率等。

  • 三种线性相关性:

1afd1bad1c609d5d0fd9060d2fd5adb0.png

二、协方差

我们先来看下两个变量 同方向变化 和 反方向变化 情况

同方向变化:

3903df804bfcf15ef945293046ed7d4d.png

反方向变化:

d45c6515a1872c4e7c5cecc705e49085.png

因此 协方差:

协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。

公式:

c2f3f77036139bbd1f1d086e79edd291.png

协方差的意义:

① 表示两个变量的相关性方向(协方差>0,正线性相关;协方差<0,负线性相关)

② 表示两个变量的相关性程度

协方差的缺点:

4c03ad52abd808d355453f19ed7dad13.png

从图中看中,两种情况的协方差差别很大,是因为x1的变化幅度不同。

所以协方差的缺点:结果易受变量的变化幅度影响

所以为了能准确研究两个变量在变化过程中的相关程度,同时消除变量的变化幅度影响,就有了 相关系数

三、相关系数

相关系数是标准化后的协方差,相关系数消除了两个变量的变化幅度影响,而只是单纯反映两个变量每单位的相关性程度

12888818dd8443fd1e6f4e1219b1a92c.png
  • 相关系数意义

(1)数值的正负表示两个变量的相关性方向(r>0 正相关; r<0 负相关; r=-1 完全负线性相关;r =1 完全正线性相关;r = 0 非线性相关 )

(2)数值的大小表示两个变量每单位的相关性程度

如何判断有相关关系?

c59e4ab30041a77aa81145416845fb0c.png

判断相关系数的大小,并没有统一的规定,一般按三部分分类

① 0~0.3 或 : -0.3~0: 弱相关

② 0.3~0.6 或 -0.6~-0.3: 中度相关

③ 0.6~1 或 -1 ~ -0.6:高度相关

四、简单线性回归

  • 最佳拟合线:

8190d11266dda887026f09a7ce775e6e.png
  • 如何求a和b?

a0ea1c3f48355cf928c68b8da3d76a56.png

这样所求出的a,b 就能构成最佳拟合线

  • 简单线性回归-python实现

建立数据集:

from collections import OrderedDict
import pandas as pd

#数据集
examDict={
    '学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,
            2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
    '分数':    [10,  22,  13,  43,  20,  22,  33,  50,  62,  
              48,  55,  75,  62,  73,  81,  76,  64,  82,  90,  93]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)

#查看数据集前5行
examDf.head()

提取特征和标签:

#特征features
exam_X=examDf.loc[:,'学习时间']

#标签labes
exam_y=examDf.loc[:,'分数']

建立训练数据和测试数据 (训练80%,测试20%):

from sklearn.model_selection import train_test_split

X_train , X_test , y_train , y_test = train_test_split(exam_X ,
                                                       exam_y ,
                                                       train_size = .8)
#输出数据大小
print('原始数据特征:',exam_X.shape ,
      ',训练数据特征:', X_train.shape , 
      ',测试数据特征:',X_test.shape )

print('原始数据标签:',exam_y.shape ,
      '训练数据标签:', y_train.shape ,
      '测试数据标签:' ,y_test.shape)

建立模型:

'''
运行后会报错,因为这里输入的特征只有1个。注意看报错信息,通过这个例子也学会如何分析报错信息
'''
#第1步:导入线性回归
from sklearn.linear_model import LinearRegression
# 第2步:创建模型:线性回归
model = LinearRegression()
#第3步:训练模型
model.fit(X_train , y_train)

出现报错信息(因为我们输入的 特征只有 1列):

ValueError: Expected 2D array, got 1D array instead:
array=[4.   0.5  1.75 1.5  2.75 4.25 3.   2.5  4.5  1.25 3.25 4.75 5.5  0.75 1.75 5.  ].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

reshape(-1,1): 根据所给的列数,自动按照原始数组的大小形成一个新的数组.

reshape(1, -1): 根据所给的行数,自动按照原始数组的大小形成一个新的数组.

使用reshape转换数组:

#将训练数据特征转换成二维数组XX行*1列
X_train=X_train.reshape(-1,1)
#将测试数据特征转换成二维数组行数*1列
X_test=X_test.reshape(-1,1)

#第1步:导入线性回归
from sklearn.linear_model import LinearRegression
# 第2步:创建模型:线性回归
model = LinearRegression()
#第3步:训练模型
model.fit(X_train , y_train)

最佳拟合线:

'''
最佳拟合线:y= + x
截距intercept:a
回归系数:b
'''

#截距
a=model.intercept_
#回归系数
b=model.coef_

print('最佳拟合线: 截距 a =',a,'回归系数 b =',b)


最佳拟合线: 截距 a = 7.67307692307692 回归系数 b = [16.02618658]

绘图:

#绘图
import matplotlib.pyplot as plt
#训练数据散点图
plt.scatter(X_train, y_train, color='blue', label="train data")

#训练数据的预测值
y_train_pred = model.predict(X_train)
#绘制最佳拟合线
plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")

#添加图标标签
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()

f05d846bc58d730c4ff68dbceeb02c24.png

五、线性评估模型准确度

b3eb9f267e43db0847fd10bcc268903a.png

如图,图2中的数据点比图1的多。误差平方和会因为数据点的多少,而影响评价的结果。

所以引入:决定系数R平方

R平方与训练点的数量无关,比误差平方和更可靠

  • 决定系数R平方

504b74d86e822f215bd22c5a05f7d90c.png

3c0e64abc7db71d866e796fcb8748736.png

决定系数R平方的意义:

(1)表示回归线的拟合程度:有多少百分比的y波动可以由回归线来描述(x的波动变化)

(2)R平方的取值在0~1之间,R平方越高,回归模型越精确。

  • 决定系数R平方-python实现
#线性回归的scroe方法得到的是决定系数R平方
#评估模型:决定系数R平方

r2 = model.score(X_test , y_test)

'''score内部会对第一个参数X_test用拟合曲线自动计算出y预测值,内容是决定系数R平方的计算过程。所以我们只用根据他的要求输入参数即可。
'''

绘图:

#导入绘图包
import matplotlib.pyplot as plt

'''
第1步:绘制训练数据散点图
'''
plt.scatter(X_train, y_train, color='blue', label="train data")

'''
第2步:用训练数据绘制最佳线
'''
#最佳拟合线训练数据的预测值
y_train_pred = model.predict(X_train)
#绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred
plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")

'''
第3步:绘制测试数据的散点图
'''
plt.scatter(X_test, y_test, color='red', label="test data")

#添加图标标签
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()

ebdf46b5dd37d4343c0c182d5df18b23.png

六、相关关系与因果关系

① 相关关系 ≠ 因果关系。因果关系是A的发生会导致B,B的发生是因为A(比如吃太多 和肥胖)。而相关关系存在第3方因素或纯属巧合(比如学校和孩子的成功有相关关系,学校越好,孩子越成功。经过研究,并没有因果关系。和孩子成功有因果关系的是 家庭原因。这里的第3方因素,就是家庭)。

② 如何判断是相关关系 还是因果关系?可以通过 单变量控制,来判断是相关关系 或 因果关系(比如控制其他因素不变,只变化一个因素,来看这个因素 是不是真的影响了结果)。

③ 什么时候需要相关关系,什么时候需要因果关系?在大部分的时候,是没法找到因果关系,所以有些问题直接应用相关关系就可以。但有些问题需要找到事件背后的原因,就需要采用因果关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值