准备工作完成后,首先考虑到预测葡萄酒质量的实际数值,使用线性回归算法来构建回归模型,考虑采用计算均方误差来评估模型的性能。
#本代码使用线性回归算法来训练模型,并预测红葡萄酒和白葡萄酒的质量
#本代码预测葡萄酒质量的实际数值,因此使用回归任务进行建模
#使用线性回归算法来构建回归模型,并计算均方误差来评估模型的性能
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加载数据
white_wine = pd.read_csv('winequality-white.csv', delimiter=';')
red_wine = pd.read_csv('winequality-red.csv', delimiter=';')
# 合并数据
data = pd.concat([white_wine, red_wine])
# 提取特征和标签
X = data.drop(['quality'], axis=1)
y = data['quality']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建模型
lr = LinearRegression()
lr.fit(X_train, y_train)
# 预测测试集
y_pred = lr.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print('均方误差(MSE):', mse)
print("均方误差(MSE)是各数据偏离真实值差值的平方和的平均数")
但是均方误差并不能直观体现葡萄酒质量的好坏,于是采用随机森林算法来训练模型,并预测红葡萄酒和白葡萄酒的质量等级。
#使用随机森林算法来训练模型,并预测红葡萄酒和白葡萄酒的质量等级
#这里的任务是预测葡萄酒的质量等级,因此使用分类任务进行建模
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据
white_wine = pd.read_csv('winequality-white.csv', delimiter=';')
red_wine = pd.read_csv('winequality-red.csv', delimiter=';')
# 合并数据
data = pd.concat([white_wine, red_wine])
# 将质量等级转换为分类标签
data['quality_label'] = pd.cut(data['quality'], bins=[0,6,10], labels=[0,1])
# 提取特征和标签
X = data.drop(['quality', 'quality_label'], axis=1)
y = data['quality_label']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 预测测试集
y_pred = rf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('准确度(Accuracy):', accuracy)
print('如果有0-10分,本算法给出的分数为:', accuracy*10,"分")
由于数据集数量较多,总体等级并不能代表全部等级,于是想到当想要对葡萄酒质量的分布情况进行可视化时,直方图是一个非常好的工具。可以使用Matplotlib库绘制白葡萄酒和红葡萄酒质量分布情况的直方图。
#当我们想要对葡萄酒质量的分布情况进行可视化时,直方图是一个非常好的工具
#这里使用Matplotlib库绘制白葡萄酒和红葡萄酒质量分布情况的直方图
#将质量得分分为6个等级,并使用alpha参数设置直方图的透明度,使得两个直方图可以同时显示
#最后,使用xlabel、ylabel和title函数设置图表的横轴标签、纵轴标签和标题,并使用legend函数添加图例
import pandas as pd
import matplotlib.pyplot as plt
# 加载数据
white_wine = pd.read_csv('winequality-white.csv', delimiter=';')
red_wine = pd.read_csv('winequality-red.csv', delimiter=';')
# 绘制白葡萄酒质量分布直方图
plt.hist(white_wine['quality'], bins=6, alpha=0.5, label='White Wine')
plt.xlabel('Quality')
plt.ylabel('Frequency')
plt.title('White Wine Quality Distribution')
plt.legend()
# 绘制红葡萄酒质量分布直方图
plt.hist(red_wine['quality'], bins=6, alpha=0.5, label='Red Wine')
plt.xlabel('Quality')
plt.ylabel('Frequency')
plt.title('Red Wine Quality Distribution')
plt.legend()
plt.show()
最后使用scikit-learn库内置的plot_tree函数绘制分类模型决策树。
#这里使用scikit-learn库内置的plot_tree函数绘制分类模型决策树
#使用DecisionTreeClassifier算法来构建分类模型,并使用plot_tree函数将决策树以可视化形式呈现
#这里使用plot_tree函数绘制决策树,使用起来非常方便,同时还可以根据需要进行参数设置,满足不同的可视化需求。
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
# 加载数据
white_wine = pd.read_csv('winequality-white.csv', delimiter=';')
red_wine = pd.read_csv('winequality-red.csv', delimiter=';')
# 合并数据
data = pd.concat([white_wine, red_wine])
# 将质量等级转换为分类标签
data['quality_label'] = pd.cut(data['quality'], bins=[0,6,10], labels=[0,1])
# 提取特征和标签
X = data.drop(['quality', 'quality_label'], axis=1)
y = data['quality_label']
# 构建模型
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt.fit(X, y)
# 绘制决策树
plt.figure(figsize=(18,12))
plot_tree(dt, filled=True, impurity=False, feature_names=X.columns, class_names=['Bad', 'Good'])
plt.show()