这是一个用于预测abalone(一种贻贝)年龄的案例。我们首先要导入必要的包,并读取数据集。
import pandas as pd
# 读取数据
columns = ['Sex', 'Length', 'Diameter', 'Height', 'Whole weight',
'Shucked weight', 'Viscera weight', 'Shell weight', 'Rings']
df = pd.read_csv('./input/abalone-data.txt',names=columns, header=None, sep=",")
# 查看数据前5行
df.head()
# 查看数据集的基本信息
df.info()
# 返回各类数据的统计变量
df.describe()
接下来,我们可以使用seaborn库绘制两个变量之间的关系图和热力图,以了解它们之间的线性相关性。
import seaborn as sb
# 查看各变量两两之间的数据关系,同一变量使用直方图
sb.pairplot(df)
# 绘制热力图,查看各变量间的线性相关性。变量之间的线性关系默认使用皮尔森相关系数(-1,1)进行衡量
sb.heatmap(df.corr(),annot=True)
接下来,我们需要对数据进行处理并完成闭式解。
import numpy as np
# 处理数据
def loadDataset(filepath):
data = []
label = []
with open(filepath,'r') as f:
files = f.readlines()
for line in files:
line = line.strip('\n').split(',')
if line=='M':
line = 0
elif line == 'F':
line = 1
else:
line=2
line = [float(elem) for elem in line]
data.append(line)
label.append(line)
return data,label
abalonedata,abalonelabel = loadDataset('./input/abalone-data.txt')
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(np.array(abalonedata),np.array(abalonelabel),test_size=0.2)
# 按列添加偏置项
x_train_1 = np.c_[np.ones(len(x_train)), x_train]
x_test_1 = np.c_[np.ones(len(x_test)), x_test]
# 求闭式解
w=np.linalg.pinv(x_train_1).dot(y_train)
最后,我们可以验证预测结果,并计算均值绝对误差和均方误差作为评价指标。
# 验证预测结果
a = np.random.choice(list(range(len(y_test))))
test_data,test_label = x_test,y_test
predict_label = np.sum(x_test_1 * w)
# 评价指标:均值绝对误差 与 均方误差
from sklearn.metrics import mean_absolute_error,mean_squared_error
predict_label = x_test_1.dot(w.reshape(-1,1))
print(mean_squared_error(y_test,predict_label),mean_absolute_error(y_test,predict_label))
希望这个案例能帮助到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |