在人们的日常生活中,体重偏高与偏低均是身体出现亚健康的体现,也是身体部分器官发病的前兆。影响体重的因素较多(如体内激素水平、饮食情况、心情原因等),而且与身高具有直接的相关性。因而,如何在指定身高下评估体重是否达标进而让人们提前预知身体状况具有一定实际意义。
训练数据 | | | 测试数据 | | |
---|
序号 | 身高(米) | 体重(千克) | 序号 | 身高(米) | 体重(千克) |
1 | 0.86 | 12 | 1 | 0.83 | 11 |
2 | 0.96 | 15 | 2 | 1.08 | 17 |
3 | 1.12 | 20 | 3 | 1.26 | 27 |
4 | 1.35 | 35 | 4 | 1.51 | 41 |
5 | 1.55 | 48 | 5 | 1.60 | 50 |
6 | 1.63 | 51 | 6 | 1.67 | 64 |
7 | 1.71 | 59 | 7 | 1.75 | 66 |
8 | 1.85 | 75 | 8 | 1.90 | 89 |

代码:
'''一、问题描述:根据表1所示训练数据构建线性回归模型并求取测试数据的预测精度'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
x_train=np.array([[0.86],[0.96],[1.12],[1.35],[1.55],[1.63],[1.71],[1.85]])
y_train=np.array([[12],[15],[20],[35],[48],[51],[59],[75]])
x_test=[[0.83],[1.08],[1.26],[1.51],[1.60],[1.67],[1.75],[1.90]]
y_test=[[11],[17],[27],[41],[50],[64],[66],[89]]
'''二、数据处理:
数据归一化处理'''
X_train=(x_train-np.min(x_train))/(np.max(x_train)-np.min(x_train))
Y_train=(y_train-np.min(y_train))/(np.max(y_train)-np.min(y_train))
X_test=(x_test-np.min(x_test))/(np.max(x_test)-np.min(x_test))
Y_test=(y_test-np.min(y_test))/(np.max(y_test)-np.min(y_test))
'''======================================================================'''
'''三、利用线性回归构建模型'''
'''归一化'''
L=LinearRegression(fit_intercept=True)
L.fit(X_train,Y_train)
ys=L.score(X_test,Y_test)
print(ys)
'''未归一化'''
L.fit(x_train,y_train)
yn=L.score(x_test,y_test)
print(yn)
'''====================================================================='''
plt.figure(1)
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.xlabel("DataClass")
plt.ylabel("TestAccuracy")
Data_list=['Normalized','Not Normalized']
xlis=[0.3,0.7]
ylis=[ys,yn]
plt.bar(xlis,ylis,width=0.3,tick_label=Data_list,color=['g','b'])
for i in range(len(xlis)):
plt.text(xlis[i], ylis[i],format(ylis[i],'.2f'))
plt.show()
'''======================================================================'''
print("L的截距为:",L.intercept_[0])
print("L的斜率为:",L.coef_[0][0])
b=L.intercept_[0]
k=L.coef_[0][0]
Y_fit=k*np.array(x_test)+b
plt.figure(2)
plt.xlabel("height")
plt.ylabel("weight")
plt.scatter(x_test,Y_fit,color='black',label='fit')
plt.plot(x_test,Y_fit,color='red',label='fit_line')
plt.scatter(x_test,y_test,color='y',label='test')
plt.grid(True)
plt.legend(loc='upper left')
plt.show()
'''四、实验分析:
体重数据随身高数据的增大而增大,归一化数据的测试精度比未归一化数据测试精度高'''