10python数据分析-回归分析

Python数据分析——第10周

回归分析

回归分析:通过建立模型来研究变量之间相互关系的密切程度、结构状态及进行模型预测的一种有效工具
在这里插入图片描述
一元线性回归:
多元线性回归:
多个因变量与多个自变量的回归:

一元非线性回归:对自变量或者因变量进行非线性的转换
分段回归:
多元非线性回归:
含有定性变量的回归:少年组、青年组、老年组,分别是0,、1、2

函数关系与相关关系

 函数关系:确定性关系,y=3+10*x
自变量确定以后,因变量也能确定下来
在这里插入图片描述
 相关关系:非确定性关系
即使你知道了自变量的值,但是你不能准确地预测出因变量的值,可能只能预测出因变量大概的范围或者均值。

相关系数

我们使用相关系数去衡量线性相关性的强弱。
在这里插入图片描述
每个自变量减去均值乘每个因变量减去均值,累加起来。除以。自变量的标准差乘上因变量的标准差。
强弱:这些点距离直线的距离。这些点越能接近于某条直线,那么它的线性关系越强。
正相关:x越大、y越大
负相关:x越大、y越小

通过计算,左图中的相关系数为0.9930858,右图的相关系数为0.9573288
在这里插入图片描述

一元线性回归模型

 若X与Y之间存在着较强的相关关系,则我们有Y≈α+βX
 若α与β的值已知,则给出相应的X值,我们可以根据Y≈α+βX得到相应的Y的预测值
在这里插入图片描述
误差:
把a和b求出来

参数

在这里插入图片描述
 截距项α
 斜率β
 误差项ε
 例子:商品销量s关于电视广告费用t的回归方程:s=10+3.4*t(单位:万元)

如何确定参数

 使用平方误差和衡量预测值与真实值的差距
 平方误差真实值y,预测值 ,则平方误差就是 在这里插入图片描述
 寻找合适的参数,使得平方误差和在这里插入图片描述 最小
在这里插入图片描述
 使用最小二乘法确定参数:
在这里插入图片描述
因为要与系数相关,把预测值写成线性回归方程形式。
 RSS其实是关于α与β的函数,因为要对RSS取得最小值,所以这里我们分别对α与β求偏导并令偏导等于0,就可以得出α与β的值
在这里插入图片描述
把大写看成是总体的

 由于总体未知,采用样本值估计
在这里插入图片描述
 从而,对于每个xi,我们可以通过 在这里插入图片描述预测相应的y值

例子

 x=c(1,2,3,4),y=c(6,5,7,10)。构建y关于x的回归方程y=α+βx
在这里插入图片描述
 使用最小二乘法求解参数:
在这里插入图片描述
 得到y=3.5+1.4x
 如果有新的点x=2.5,则我们预测相应的y值为3.5+1.4*2.5=7

多元线性回归模型

 当Y值的影响因素不唯一时,采用多元线性回归模型
在这里插入图片描述
 例如商品的销售额可能与电视广告投入,收音机广告投入,报纸广告投入有关系,可以

在这里插入图片描述
在这里插入图片描述

参数估计

 最小二乘法:
 与一元回归方程的算法相似
在这里插入图片描述 是关于βi的函数。分别对βi求偏导并令偏导等于0,可以解出相应的βi的值

以矩阵的形式书写:
在这里插入图片描述

Python实现

#-*- coding: utf-8 -*-
from numpy import *
import pandas as pd
###线性回归####
#读取数据,数据在网页上可以下载得到(商品销售额、电视广告投入、收音机广告投入、报纸广告投入)
data = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv', index_col=0)

#先查看一下数据集的基本情况,看到一共200行数据
data.head()
data.tail()

#画散点图
import seaborn as sns
import matplotlib  
%matplotlib inline 
sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8)    
sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8, kind='reg')

#计算相关系数矩阵
data.corr()

#构建X、Y数据集
X = data[['TV', 'Radio', 'Newspaper']]
X.head()

y = data['Sales']
y.head()

##直接根据系数矩阵公式计算
def standRegres(xArr,yArr):
    xMat = mat(xArr); yMat = mat(yArr).T
    xTx = xMat.T*xMat
    if linalg.det(xTx) == 0.0:
        print "This matrix is singular, cannot do inverse"
        return
    ws = xTx.I * (xMat.T*yMat)
    return ws


#求解回归方程系数,增加截距项
X2=X
X2['intercept']=[1]*200
standRegres(X2,y)


##利用现有库求解
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()

linreg.fit(X, y)

print linreg.intercept_
print linreg.coef_
print zip(['TV','Radio','Newspaper'], linreg.coef_)

##测试集和训练集的构建
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
linreg.fit(X_train, y_train)
#结果
print linreg.intercept_
print linreg.coef_
print zip(['TV','Radio','Newspaper'], linreg.coef_)

#预测
y_pred = linreg.predict(X_test)

#误差评估
from sklearn import metrics

#calculate MAE using scikit-learn
print "MAE:",metrics.mean_absolute_error(y_test,y_pred)


#calculate MSE using scikit-learn
print "MSE:",metrics.mean_squared_error(y_test,y_pred)


#calculate RMSE using scikit-learn
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

##模型比较
feature_cols = ['TV', 'Radio']

X = data[feature_cols]
y = data.Sales

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)

linreg.fit(X_train, y_train)

y_pred = linreg.predict(X_test)


#calculate MAE using scikit-learn
print "MAE:",metrics.mean_absolute_error(y_test,y_pred)


#calculate MSE using scikit-learn
print "MSE:",metrics.mean_squared_error(y_test,y_pred)


#calculate RMSE using scikit-learn
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

 读取数据
在这里插入图片描述
 散点图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 模型构建
– 直接利用公式编写函数
– 利用现有的库
在这里插入图片描述
矩阵的行列式,如果等于0,打印这个矩阵是奇异的,不能进行求逆运算。

增加截距项,都是1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 构建训练集与测试集,评估模型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 变量选择,模型比较
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回归分析是一种用于研究因变量与一个或多个自变量之间关系的统计分析方法。在Python中,我们可以使用statsmodels库进行回归分析。下面是一个简单的例子: 假设我们有一个数据集,其中包含了一个因变量y和两个自变量x1和x2。我们想要研究y与x1、x2之间的关系。首先,我们需要导入statsmodels库并读取数据集: ```python import statsmodels.api as sm import pandas as pd data = pd.read_csv('data.csv') ``` 接下来,我们可以使用OLS(Ordinary Least Squares)方法进行回归分析。这个方法可以拟合线性回归模型,并计算出每个自变量的系数和截距。代码如下: ```python X = data[['x1', 'x2']] y = data['y'] X = sm.add_constant(X) # 添加截距项 model = sm.OLS(y, X).fit() # 拟合线性回归模型 print(model.summary()) # 输出回归分析结果 ``` 上述代码中,我们首先将自变量和因变量分别赋值给X和y。然后,我们使用add_constant方法为X添加截距项。最后,我们使用OLS方法拟合线性回归模型,并使用summary方法输出回归分析结果。 除了线性回归,还有其他类型回归分析方法,例如Logistic回归分析。如果因变量只有两种取值,我们可以使用Logistic回归分析来拟合模型。在Python中,我们可以使用statsmodels库的Logit方法进行Logistic回归分析。代码如下: ```python X = data[['x1', 'x2']] y = data['y'] X = sm.add_constant(X) # 添加截距项 model = sm.Logit(y, X).fit() # 拟合Logistic回归模型 print(model.summary()) # 输出回归分析结果 ``` 上述代码中,我们使用Logit方法拟合Logistic回归模型,并使用summary方法输出回归分析结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值