用python处理excel数据、求线性回归方程的r值_线性回归之R与Python的实现方式对比...

1. 在统计学中,回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。按照自变量和因变量之间的关系类型,可以分为线性回归分析和非线性回归分析。线性回归通常是人们在学习预测模型时首选的技术之一,它的因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。线性回归过程主要解决的就是如何通过样本来获取最佳的拟合线。最常用的方法便是最小二乘法,它通过最小化误差的平方和寻找数据的最佳函数匹配。

2. 线性回归的代数推导:

3. 一元线性回归的python实现方式:

使用随机数生成器,得到30组随机数作为我们的原始数据。样本数据为y=10+5x,但是添加了一个随机扰动项。猜测其模型结果应该是y = 5*x+12.5

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

#机器学习模块导入线性回归模型

from sklearn.linear_model import LinearRegression

rng = np.random.RandomState(2)

xtrain = 10 * rng.rand(30)

ytrain = 10 + 5 * xtrain + 5*rng.rand(30)

查看我们的样本数据,以散点图显示:

fig = plt.figure()

ax1 = fig.add_subplot(1,2,1)

plt.scatter(xtrain,ytrain,marker = '.',color = 'r')

plt.grid()

plt.title('样本数据散点图')

样本数据如下:

创建线性回归模型并查看结果

coef_和intercept可直接查看回归模型的参数,可以看到模型为y=4.98669057 * x + 12.695465281792064,与我们猜测的结果y=12.5+5*x还算接近

具体代码如下:

xtest = np.linspace(0,10,10)

ytest = model.predict(xtest[:,np.newaxis])

ytest2 = model.predict(xtrain[:,np.newaxis]) #样本数据对应的预测值

#绘制拟合结果和误差图

ax2 = fig.add_subplot(1,2,2)

plt.scatter(xtrain,ytrain,marker = '.',color = 'k')

plt.scatter(xtrain,ytest2,marker = 'x',color = 'g')

plt.plot(xtest,ytest,color = 'r')

plt.plot([xtrain,xtrain],[ytrain,ytest2],color = 'grey')

plt.grid()

plt.title('线性回归拟合')

拟合好了之后需要进行模型检验,如下

(r2 = ssr / sst,为了记忆几个统计量,可以手工算下r2,也可调用score函数,两者计算的结果均为0.9858525390892754)

from sklearn import metrics

mse = metrics.mean_squared_error(ytrain,ytest2) # 求出均方差

rmse = np.sqrt(mse) # 求出均方根

#ssr = ((ytest2 - ytrain.mean())**2).sum()

#sst = ((ytrain - ytrain.mean())**2).sum()

#r2 = ssr / sst # 求出确定系数

r22 = model.score(xtrain[:,np.newaxis],ytrain)

4. 一元线性回归的R实现方式:

为了样本数据一致,将上文中的xtrain和ytrain数据导出csv文件,并用R读入。

回归结果为y = 4.987 * x + 12.695,结果一致,但感觉代码及展示方式比PYTHON简便很多,而且summary(model)可以看到各种拟合参数。

5. 多元线性回归:

多元线性回归整体类似,自变量更多一些,但是也有更多的回归处理方法,对于 处理方法暂时掌握的不足够,待补充学习。

rng = np.random.RandomState(5)

xtrain = 10 * rng.rand(150,4)

ytrain = 20 + np.dot(xtrain ,[1.5,2,-4,3])

df = pd.DataFrame(xtrain, columns = ['b1','b2','b3','b4'])

df['y'] = ytrain

pd.scatter_matrix(df[['b1','b2','b3','b4']],figsize=(10,6),

diagonal='kde',

alpha = 0.5,

range_padding=0.1)

print(df.head())

# 创建数据,其中包括4个自变量

# 4个变量相互独立

model = LinearRegression()

model.fit(df[['b1','b2','b3','b4']],df['y'])

6. 几个统计量笔记:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值