初识线性回归


一、用excel中数据分析功能做线性回归练习

  第一步,打开下载的身高体重数据集,录入数据(以20组数据为例)。

第二步、作散点图

选中数据(包括自变量和因变量),在“插入”菜单栏中选择“插入散点图”。

第三步、回归

观察散点图,判断点列分布是否具有线性趋势。只有当数据具有线性分布特征时,才能采用线性回归分析方法。从图中可以看出,本例数据具有线性分布趋势,可以进行线性回归。打开“工具”下拉菜单,双击“数据分析”选项,选择“回归”选项。点击生成的散点图中的数据点,点击“添加趋势线”,选择“线性”,并在选择框中选中“显示公式(E)”和“显示R平方值(R)”。

200组和2000组数据操作同上

 


二、用jupyter编程(不借助第三方库),用最小二乘法,重做第1题


1.打开jupyter Notebook


2.新建文件,重命名文件

3.编写程序 

(1)20组数据,代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
df = pd.read_excel('D:\weights_heights.xlsx')
#20组数据
d=df.head(20)
d
x=d["Height"]
y=d["Weight"]
plt.scatter(x,y)
plt.axis([65,72,0,180])
plt.show()
x_mean=np.mean(x)
y_mean=np.mean(y)
num=0.0#分子
d = 0.0#分母
m=0.0#
for x_i, y_i in zip(x,y):
    num += (x_i - x_mean) * (y_i - y_mean)
    d  +=(x_i - x_mean) ** 2
    m +=(y_i - y_mean) ** 2
a = num/d
b = y_mean - a * x_mean
y_hat=a * x +b
plt.scatter(x,y)
plt.plot(x,y_hat,color='r')
plt.axis([65,72,0,180])
plt.show()

结果显示如下:

(2)200组数据,代码如下:

d1=df.head(200)
x=d1["Height"]
y=d1["Weight"]
plt.scatter(x,y)
plt.axis([62,76,0,180])
#计算平均值
x_mean=np.mean(x)
y_mean=np.mean(y)
num=0.0
d = 0.0
m=0.0
for x_i, y_i in zip(x,y):
    num += (x_i - x_mean) * (y_i - y_mean)
    d  +=(x_i - x_mean) ** 2
    m +=(y_i - y_mean) ** 2
a1 = num/d
b1 = y_mean - a1 * x_mean
y_hat = a1 * x + b1
plt.scatter(x,y)
plt.plot(x,y_hat,color='g')
plt.axis([62,75,0,180])
plt.show()

结果显示如下图:

 (3)2000组数据,代码如下:

d2=df.head(2000)
x=d2["Height"]
y=d2["Weight"]
plt.scatter(x,y)
plt.axis([0,80,0,180])
x_mean=np.mean(x)
y_mean=np.mean(y)
num=0.0
d = 0.0
m=0.0
for x_i, y_i in zip(x,y):
    num += (x_i - x_mean) * (y_i - y_mean)
    d  +=(x_i - x_mean) ** 2
    m +=(y_i - y_mean) ** 2
a2 = num/d
b2 = y_mean - a2 * x_mean
y_hat = a2 * x + b2
plt.scatter(x,y)
plt.plot(x,y_hat,color='g')
plt.axis([0,80,0,180])
plt.show()

结果显示如下图:

 三、用jupyter编程,借助skleran,重做第1题

1、20组数据

代码如下:

(1)需要用到的包导入准备好,读取数据

import numpy as np
import pandas as pd
from contextlib import contextmanager as _contextmanager
import logging
from numpy import array
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import math
df=pd.read_excel('D:\weights_heights1.xlsx')
df.shape#读取数据

(2)赋值变量取20组数据

x=array(df[['Weight']].values[:20,:])
y=array(df[['Height']].values[:20,:])

(3)调用线性回归函数

model=LinearRegression(fit_intercept=True,normalize=True)
model.fit(x,y)

(4)输出斜率和截距

print(model.coef_)
print(model.intercept_)

(5)输出线性回归表达式

a=model.intercept_
b=model.coef_
y_hat=b*x+a
print("线性回归方程为:y=",b,"x",a)

(6)计算输出R^2

model.score(x,y)

(7)绘图输出

plt.figure()
plt.scatter(x,y)#散点图绘制原始数据
plt.plot(x,y_hat,color='coral')
plt.show()

2、200组数据

代码与20组类似,只需要把赋值变量取为200组数据,即将values中的20改成200即可

 计算结果输出显示:

绘图显示:

3、2000组数据

代码与20组类似,只需要把赋值变量取为2000组数据,即将values中的20改为2000即可。

输出结果显示:

绘图显示:

 






总结

以上是线性回归的简单练习。Excel和jupyter解决线性回归问题得出的结果大致相同。Excel只需选中数据,它的数据分析功能可以自动计算出相关数据,绘出图像。不借助第三方库,使用最小二乘法来编程,要自己计算得到相关系数,斜率和截距,并以此数据来绘图。借助sklearn库编程,sklearn有提供相关的函数,只需要调用函数即能得到输出值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值