考虑一个肾功能相关的研究,数据点(xi, yi)取自n=157个健康的志愿者,xi表示第i个志愿者的年龄(age,以年为单位),yi是一个综合的测量值“tot”。由散点图可以看出肾功能随着年龄的增大是普遍下降的,这个下降的速率对于肾移植来说则是一个比较重要的问题。
书中通过最小二乘法用线性模型拟合了数据点,下面我用python来写一下书中的最小二乘和画图的过程,点此下载数据 。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
kidney = np.loadtxt('D:/CASI/data/kidney.txt',delimiter=' ',skiprows=1)
model = linear_model.LinearRegression()
model.fit(X=kidney[:,0].reshape(-1,1), y=kidney[:,1].reshape(-1,1))
y_plot = model.predict(kidney[:,0].reshape(-1,1))
plt.rc('font', size=6)
plt.rc('figure', figsize=(4,3), dpi=200)
plt.scatter(x=kidney[:,0], y=kidney[:,1],s=6,marker='*',alpha=0.6) # 画出散点图
plt.plot(kidney[:,0], y_plot, color='green') # 画出拟合直线
plt.xlabel('age')
plt.ylabel('tot')
plt.show()
Figure_1.jpeg
网友评论