1)用excel中数据分析功能做线性回归练习。分别选取20、200、2000(或20000)组数据,进行练习。记录回归方程式、相关系数R2 ; 导入加载宏
数据分析选择回归
右边生成线性回归方程和R的平方值
20组:
Y=4.128x-152.23
R^2=0.3254
200组:
Y=3.4671x-108.34
R^=0.3131
2)用jupyter编程(不借助第三方库),用最小二乘法,重做第1题;
编程代码:
import matplotlib.pyplot as plt;
import pandas as pd
import numpy as np
import math
#准备数据
p=pd.read_excel('G:\下载\weights_heights.xls','weights_heights')
#读取20行数据
p1=p.head(20)
x=p1["Height"]
y=p1["Weight"]
# 平均值
x_mean = np.mean(x)
y_mean = np.mean(y)
#x(或y)列的总数(即n)
xsize = x.size
zi=((x-x_mean)*(y-y_mean)).sum()
mu=((x-x_mean)*(x-x_mean)).sum()
n=((y-y_mean)*(y-y_mean)).sum()
# 参数a b
a = zi / mu
b = y_mean - a * x_mean
#相关系数R的平方
m=((zi/math.sqrt(mu*n))**2)
# 这里对参数保留4位有效数字
a = np.around(a,decimals=4)
b = np.around(b,decimals=4)
m = np.around(m,decimals=4)
print(f'回归线方程:y = {a}x +({b})')
print(f'相关回归系数为{m}')
#借助第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')
20组数据:
回归线方程:y = 4.128x +(-152.2338)
相关回归系数为0.3254
200组代码仅需修改p1=p.head(20)改为p1=p.head(200)
200组:
回归线方程:y = 3.4317x +(-105.959)
相关回归系数为0.31
20000组代码仅需修改p1=p.head(200)改为p1=p.head(20000)
20000组:
回归线方程:y = 3.071x +(-81.691)
相关回归系数为0.2513
3)用jupyter编程,借助skleran,重做第1题。
编程代码:
import pandas as pd
import numpy as np
from numpy import array
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import math
df = pd.read_excel('G:\下载\weights_heights.xls','weights_heights')
df.shape
x=array(df[['Height']].values[:20,:])
y=array(df[['Weight']].values[:20,:])
model = LinearRegression()
model.fit(x, y)
print(model.coef_)
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hat=b * x +a
print("线性回归方程为:y=",b,"x",a)
model.score(x,y)
plt.figure()
plt.scatter(x,y) # 散点图绘制原始数据x,y
plt.plot(x,y_hat,color="r") # 绘制直线
plt.show()
20组数据:
代码仅需修改:
x=array(df[['Height']].values[:200,:])
y=array(df[['Weight']].values[:200,:])
200组数据:
代码仅需修改:
x=array(df[['Height']].values[:20000,:])
y=array(df[['Weight']].values[:20000,:])
20000组数据:
对三种方式的结果进行对比:
excel有自己设计的算法,勾选数据然后利用他的算法,只需简单调用即可得到结果,比较方便。sklearn非常方便,内有函数可以调用,写下来的代码可以节约不少速度,比较简洁,自己用最小二乘法写代码比较麻烦,但是可以增加我们对代码的理解能力,三种方法得到的结果都一样的。
4)总结
本次学习让我对python编程有了更深的理解,也熟悉了excel工具的运用,对比了下python和java,python在数学这方面感觉比java更加好使,可以生成图,让我们观察对比起来更简单,学会python对以后工作非常有用。