本文已参加「新人创造礼」活动,一起开启创造之路。
理论上,一个人的身高除了随年纪变大而增长之外,在一定程度上还受遗传和饮食习惯以及其他要素的影响,可是饮食等其他要素对身高的影响很难衡量。咱们能够把问题简化一下,假定一个人的身高只受年纪、性别、爸爸妈妈身高、祖爸爸妈妈身高,外祖爸爸妈妈身高这几个要素的影响,并假定大致契合线性关系。
import copy
import numpy as np
from sklearn import linear_model
# 儿童年纪,性别(0女1男),父亲身高,母亲身高,祖父身高,祖母身高,外祖父身高,外祖母身高
x = np.array([[1, 0, 180, 165, 175, 165, 170, 165],
[3, 0, 180, 165, 175, 165, 173, 165],
[4, 0, 180, 165, 175, 165, 170, 165],
[6, 0, 180, 165, 175, 165, 170, 165],
[8, 1, 180, 165, 175, 167, 170, 165],
[10, 0, 180, 166, 175, 165, 170, 165],
[11, 0, 180, 165, 175, 165, 170, 165],
[12, 0, 180, 165, 175, 165, 170, 165],
[13, 1, 180, 165, 175, 165, 170, 165],
[14, 0, 180, 165, 175, 165, 170, 165],
[17, 0, 170, 165, 175, 165, 170, 165]])
# 儿童身高,单位:cm
y = np.array([60, 90, 100, 110,
130, 140, 150, 164,
160, 163, 168])
# 创建线性回归模型
lr = linear_model.LinearRegression()
# 拟合
lr.fit(x, y)
# 测试数据集
xs = np.array([[10, 0, 180, 165, 175, 165, 170, 165],
[17, 1, 173, 153, 175, 161, 170, 161],
[34, 0, 170, 165, 170, 165, 170, 165]])
for item in xs:
# 深复制,假定超越18岁今后就不再长高了
item1 = copy.deepcopy(item)
if item1[0] > 18:
item1[0] = 18
item2 = item1.reshape(1, -1) # 将数组转换化为一行
pre_y = lr.predict(item2) # 获取猜测身高
print(item, ':', str(pre_y))
print(lr.coef_) # 线性回归函数的系数
print(lr.intercept_) # 线性回归函数的截距
i = 1
Y = "Y = "
for b in lr.coef_:
Y += str(b) + " * X" + str(i) + "\n + "
i += 1
Y += str(lr.intercept_)
print(Y) # 模型的线性回归函数方程
依据测试集猜测儿童身高
多元线性回归模型:
线性回归函数的系数 (获取B1…..Bk)
线性回归函数的截距 (获取截距B0)
依据线性回归函数的系数和截距,得到模型的线性回归函数方程