回归分析(二)—— 一元线性回归分析
主要内容回归分析概述一元线性回归分析多元线性回归逻辑回归其他回归分析一、回归分析概述(一)回归分析的定义与分类(二)回归分析的过程(1)收集一组包含因变量和自变量的数据;(2)根据因变量和自变量之间的关系,初步设定回归模型;(3)求解合理的回归系数;(4)进行相关性检验,确定相关系数;(5)利用模型对因变量作出预测或解释,并计算预测值的置信区间。一元线性回归分析(一)一元线性回归方法随机误差反映了
二、一元线性回归分析
(一)一元线性回归方法
随机误差反映了除x和y之间的线性关系之外的随机因素对y的影响。
分析预测房子的大小(平方英尺)和房价(美元)之间的对应关系。
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.size']=13
y=[6450,7450,8450,9450,11450,15450,18450]
x=[150,200,250,300,350,400,600]
plt.scatter(x,y)
plt.xlabel('面积(平方英尺)')
plt.ylabel('售价(美元)')
plt.show()
(二)一元线性回归模型的参数估计
一元线性回归模型中参数估计方法有最小二乘法、矩方法和极大似然方法。
最小二乘法(Least Squre Estimation, LSE)又称最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。
根据微积分求极值原理,通过求偏导并置为0得到:
求解方程组得到:
将求得的参数代入方程,即可得到最佳拟合曲线。
(三)一元线性回归模型的误差方差估计
(四)一元回归模型的主要统计检验
回归分析要通过样本所估计的参数来代替总体的真实参数,或者说用样本回归线代替总体回归线。尽管从统计性质上已知,如果有足够多的重复抽样,参数的估计值的期望就等于总体的参数真值,但在一次抽样中,估计值不一定就等于该真值。那么在一次抽样中,参数的估计值与真值的差异有多大,是否显著,就需要进一步进行统计检验。
在一元回归的统计检验主要包括拟合优度检验,变量显著性检验和残差标准差检验。
- 拟合优度检验
拟合优度检验是用卡方统计量进行统计显著性检验的重要内容之一。它是依据总体分布状况,计算出分类变量中各类别的期望频数,与分布的观察频数进行对比,判断期望频数与观察频数是否有显著差异,从而达到从分类变量进行分析的目的。它是对样本回归直线与样本观测值之间拟合程度的检验。 - 变量的显著性检验(t检验)
显著性检验就是事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设(备择假设)是否合理,即判断总体的真实情况与原假设是否有显著性差异。显著性检验是针对我们对总体所做的假设进行检验,其原理就是“小概率事件实际不可能性原理”来接受或否定假设。
(五)一元线性回归的Python实现
对鸢尾花数据集中的’petal-length’和’petal-width’两列数据进行回归分析。
(1)导入包和数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LinearRegression
%matplotlib inline
iris = load_iris() # 导入数据集iris
data = pd.DataFrame(iris.data)
data.columns = ['sepal-length','sepal-width','petal-length','petal-width']
data.head() # 显示前5行
(2)对数据集中的’petal-length’和’petal-width’两列数据进行回归分析
# 使用sklearn完成一元线性回归
x = data['petal-length'].values
y = data['petal-width'].values
x = x.reshape(len(x),1)
y = y.reshape(len(y),1)
clf = LinearRegression()
clf.fit(x,y)
pre = clf.predict(x)
plt.scatter(x,y,s=50)
plt.plot(x,pre,'r-',linewidth=2)
plt.xlabel('petal-length')
plt.ylabel('petal-width')
for idx, m in enumerate(x):
plt.plot([m,m],[y[idx],pre[idx]],'g-')
plt.show()
(3)显示回归线的参数
print(u"系数", clf.coef_)
print(u"截距", clf.intercept_)
print(np.mean(y-pre)**2)
# 系数 [[0.41575542]]
# 截距 [-0.36307552]
# 1.013248007150544e-32
(4)对花萼长度为3.9的花,预测其花萼宽度。
print(clf.predict([[3.9]]))
# [[1.2583706]]
更多推荐
所有评论(0)