一、excel中数据分析功能做线性回归练习
打开excel身高表,点开趋势线
点击渐近线右边选择渐近线格式,更多选项
选中20组数据
选中200个数据
选中2000个数据
二、jupyter编程(不借助第三方库),最小二乘法,重做第1题
打开jupyter
upload将数据导入
导入包
import numpy as np
import pandas
import xlrd
import matplotlib.pyplot as plt
将表格中数据存入到数组之中
#导入需要读取Excel表格的路径
data = xlrd.open_workbook("weights_heights(身高-体重数据集).xls")
table = data.sheets()[1]
x=[]
y=[]
for i in range (1,5000):
x.append(table.cell(i,1).value)
y.append(table.cell(i,2).value)
展示散点图(200组数据为例)
plt.scatter(x[0:200], y[0:200])
plt.show()
计算代码:
def f(a):
sum=0
pingjunx=0
pingjuny=0
chu=0
for i in range(0,a):
pingjunx+=x[i]
pingjuny+=y[i]
pingjuny/=a
pingjunx/=a
for i in range(0,a):
sum+=(x[i]-pingjunx)*(y[i]-pingjuny)
chu+=(x[i]-pingjunx)*(x[i]-pingjuny)
B1=sum/chu
B0=pingjuny-B1*pingjunx
print(B1)
print(B0)
xx = np.linspace(0,100, 100)
yy = B1*xx+B0
plt.scatter(x[0:a], y[0:a],s = 1)
plt.xlim(62,74)
plt.ylim(0,180)
print("相关系数R^2为")
shang=0
xia1=0
xia2=0
for i in range (0,a):
xia1+=(x[i]-pingjunx)*(x[i]-pingjunx)
xia2+=(y[i]-pingjuny)*(y[i]-pingjuny)
shang+=(x[i]-pingjunx)*(y[i]-pingjuny)
print(shang*shang/(xia1*xia2))
plt.plot(xx, yy, c='orange')
plt.show()
return
运行,输入f(20)
选取200组数据
三.借助skleran对数据进行拟合
引入包
from sklearn import linear_model
通过sklearn中的api创建一个线性回归模型,选取a个数据进行拟合输出截距以及斜率
def ff(a):
model = linear_model.LinearRegression()
model.fit(np.array(x[0:a]).reshape(-1, 1),np.array(y[0:a]).reshape(-1, 1))
print(model.coef_)
print(model.intercept_)
20组数据
200组数据
2000组数据
可以看到sklearn它的一元线性回归方程也是通过最小二乘法来实现以至于得到了同样的结果。