由西瓜的密度、含糖量推断西瓜的成熟度(0代表生,1代表熟)。
- 编程实现多变量线性回归,给出在西瓜数据集(见表1)上的结果(即 模型参数)。
- 在判断西瓜成熟度这个问题上,请解释密度跟含糖量哪个指标更重要
要求:提交代码(Python),请包含相关语句注释,以及执行结果截图。
- 编程实现多变量回归,给出在西瓜数据集(表1)上的结果(模型参数)。
假如我们想通过色泽、根蒂和敲击声来判断一下西瓜的成熟度。学习任务变为多变量回归。将不同的指标量化得到上述数据集,过程如下图
因此可以对此数值化后的数据集进行线性回归:
因此直接根据公式计算的代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xlname=r"C:\Users\34780\Desktop\大二下\机器学习\作业\实验一\西瓜数据
集.xlsx"
data=pd.read_excel(xlname,sheet_name="Sheet1")
data=np.array(data)
data_y=data[:,3]
data_x=np.hstack((data[:,1:3],np.ones((data.shape[0],1))))
w=np.matmul(np.matmul(np.linalg.pinv(np.matmul(np.transpose(data_x),dat
a_x)),np.transpose(data_x),data_y) #核心公式的代码表示
x=data[:,1] #特征一
y=data[:,2] #特征二
z=data[:,3] #成熟度
zz=w[0]*x+w[1]*y+w[2] #拟合的线性模型
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z,'blue')
ax.scatter(x,y,zz,'red')
ax.set_zlabel('Z',fontdict={'size': 15, 'color': 'red'})
ax.set_ylabel('Y',fontdict={'size': 15, 'color': 'red'})
ax.set_xlabel('X',fontdict={'size': 15, 'color': 'red'})
plt.show()
当然,如果直接调用sklearn库的库函数,代码如下
from sklearn.linear_model import LinearRegression as lr
reg=lr().fit(data_x,data_y)
score=reg.score(data_x,data_y)
得到的结果如下,
其得分score=0.5709708011721539
- 在判断西瓜成熟度这个问题上,请解释密度跟含糖量哪个指标更重要
由计算结果可知,西瓜密度,含糖量的权重分别为0.656,0.66即含糖量的权重是大于密度的,因此在西瓜成熟度这个问题上,含糖量更重要。