使用Python根据各种特征对葡萄酒分类的教程

437 阅读4分钟

大家好!在本教程中,我们将学习如何在Python编程语言中根据各种特征对葡萄酒进行分类。


葡萄酒分类简介

在这个世界上有许多葡萄酒,包括甜酒、起泡酒、开胃酒、流行酒、餐酒和陈年葡萄酒。

你可能会想,如何知道哪种酒是好的,哪种是不好的。这个问题的答案是机器学习!

目前有许多葡萄酒分类方法。这里列出了其中的几个:

  1. CART
  2. 逻辑回归
  3. 随机森林
  4. 纳伊夫贝叶斯
  5. 感知
  6. 检验检疫局
  7. KNN

在Python中实现葡萄酒分类

现在让我们进入一个非常基本的Python中的葡萄酒分类器的实现。这将给你一个起点,让你了解分类器是如何工作的,以及你如何在Python中为各种真实世界的场景实现它们。

1.导入模块

第一步是将所有必要的模块/库导入程序。分类所需的模块是一些基本的模块,如:

  1. Numpy
  2. Pandas
  3. Matplotlib

下一步是将所有的模型导入到sklearn库下的程序中。我们还将包括sklearn库中的一些其他功能。

所加载的模型列举如下

  1. SVM
  2. Logistic Regression
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix,accuracy_score
from sklearn.preprocessing import normalize


2.数据集准备

接下来,我们需要准备我们的数据集。让我先介绍一下数据集,然后将其导入我们的应用程序中。

2.1 数据集的介绍

在这个数据集中,我们有6497个观察值,总共有12个特征。在任何变量中都没有NAN值。 你可以在这里轻松下载数据。

这12个特征的名称和描述如下:

  • 固定酸度。葡萄酒中的酸度数量
  • 挥发性酸度。葡萄酒中存在的醋酸量
  • 柠檬酸。葡萄酒中柠檬酸的数量
  • 残余糖分。发酵后的含糖量
  • 氯化物。葡萄酒中存在的盐分的数量
  • 游离二氧化硫。游离形式的二氧化硫的数量
  • 总二氧化硫。游离和结合形式的S02的数量
  • 密度。葡萄酒的密度(质量/体积)。
  • pH值:葡萄酒的pH值,范围为0-14
  • 硫酸盐。葡萄酒中的二氧化硫气体(S02)含量的数量
  • 酒精。葡萄酒中存在的酒精量
  • 质量。所述葡萄酒的最终质量

2.2 加载数据集

read_csv 函数的帮助下,数据集被加载到程序中,并使用head 函数显示数据集的前五行。

data=pd.read_csv("./wine_dataset.csv")
data.head()

Wine Classify Data First5

葡萄酒分类数据的第一行5

2.3 清理数据

数据集的清理包括在下面提到的代码的帮助下,删除不必要的列和NaN值。

data=data.drop('Unnamed: 0',axis=1)
data.dropna()

2.4 数据的可视化

一个重要的步骤是在进一步处理数据之前首先将其可视化。可视化有两种形式,即:

  1. 直方图
  2. 海波图
绘制直方图
plt.style.use('dark_background')
colors=['blue','green','red','cyan','magenta','yellow','blue','green','red','magenta','cyan','yellow']
plt.figure(figsize=(20,50))
for i in range(1,13):
    plt.subplot(6,6,i)
    plt.hist(data[data.columns[i-1]],color=colors[i-1])
    plt.xlabel(data.columns[i-1])
plt.show()

我们将为每个特征分别绘制直方图。输出显示如下:

Wine Classify Histogram Plot

葡萄酒分类直方图图谱

绘制Seaborn图
import seaborn as sns
plt.figure(figsize=(10,10))
correlations = data[data.columns].corr(method='pearson')
sns.heatmap(correlations, annot = True)
plt.show()

Seaborn图用于显示数据集中不同特征之间的关系。

Wine Classify Seaborn Plot

葡萄酒分类Seaborn图

2.5 训练-测试分割和数据归一化

要把数据分成训练和测试数据,没有最佳的分割比例。

但其中一个公平的分割规则是80/20规则,即80%的数据用于训练数据,其余20%用于测试数据。

这一步还涉及到对数据集的规范化。

split=int(0.8*data.shape[0])
print("Split of data is at: ",split)
print("\n-------AFTER SPLITTING-------")
train_data=data[:split]
test_data=data[split:]
print('Shape of train data:',train_data.shape)
print('Shape of train data:',test_data.shape)
print("\n----CREATING X AND Y TRAINING TESTING DATA----")
y_train=train_data['quality']
y_test=test_data['quality']
x_train=train_data.drop('quality',axis=1)
x_test=test_data.drop('quality',axis=1)
print('Shape of x train data:',x_train.shape)
print('Shape of y train data:',y_train.shape)
print('Shape of x test data:',x_test.shape)
print('Shape of y test data:',y_test.shape)

nor_train=normalize(x_train)
nor_test=normalize(x_test)


3.葡萄酒分类模型

在这个程序中,我们使用了两种算法,即SVM和Logistic Regression。

3.1 支持向量机(SVM)算法

clf = svm.SVC(kernel='linear')
clf.fit(nor_train, y_train)
y_pred_svm = clf.predict(nor_test)
print("Accuracy (SVM) :",metrics.accuracy_score(y_test, y_pred_svm)*100)

该模型的准确性变成了大约50%

3.2 Logistic回归算法

logmodel = LogisticRegression()
logmodel.fit(nor_train, y_train)
y_pred_LR= logmodel.predict(nor_test)
print('Mean Absolute Error(Logistic Regression):', metrics.mean_absolute_error(y_test, y_pred_LR)*100)

在这种情况下,准确率也变成了大约50% 。其主要原因是我们所使用/创建的模型。先进的模型,如tensorflow可用的模型是


结论

为了获得更高的准确率,你也可以检查一下tensorflow模型!

学习愉快!😇

请继续关注更多此类教程!谢谢您的阅读!