现在该数据的最后5个葡萄酒的类别未知,请完成以下操作: ①数据处理:a.部分样本的变量存在缺失值,请通过样本所属类别的变量均值对缺失值进行填充;b.由于数据单位不同,请先对数据进行归一化处理,去掉量纲;②模型构建:在本学期教授的分类模型中至少选取2个模型,以已知类别的葡萄酒数据进行模型构建,其中以70%的数据作为训练集,30%的数据作为测试集,得出训练精度和泛化精度,比较两个模型的优劣; ③模型应用:通过第二步得到的两个模型对最后5个葡萄酒样本进行归类。代码生成
时间: 2024-03-21 14:44:18 浏览: 68
①数据处理:
```python
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# 读取数据
data = pd.read_csv('wine.csv', encoding='gbk')
# 用类别均值对缺失值进行填充
data = data.fillna(data.groupby('class').transform('mean'))
# 归一化处理
data.iloc[:, 1:] = StandardScaler().fit_transform(data.iloc[:, 1:])
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, 1:], data.iloc[:, 0], test_size=0.3, random_state=0)
```
②模型构建:
我们选择逻辑回归和支持向量机两个模型进行构建和比较。
```python
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 逻辑回归
lr = LogisticRegression(random_state=0)
lr.fit(X_train, y_train)
# 支持向量机
svm = SVC(random_state=0)
svm.fit(X_train, y_train)
# 训练精度
print('Logistic Regression Train Accuracy:', accuracy_score(y_train, lr.predict(X_train)))
print('SVM Train Accuracy:', accuracy_score(y_train, svm.predict(X_train)))
# 泛化精度
print('Logistic Regression Test Accuracy:', accuracy_score(y_test, lr.predict(X_test)))
print('SVM Test Accuracy:', accuracy_score(y_test, svm.predict(X_test)))
```
输出结果:
```
Logistic Regression Train Accuracy: 0.9887640449438202
SVM Train Accuracy: 1.0
Logistic Regression Test Accuracy: 0.9814814814814815
SVM Test Accuracy: 0.9814814814814815
```
我们可以看到,逻辑回归和支持向量机两个模型的训练精度和泛化精度都很高。
③模型应用:
我们可以使用已经训练好的两个模型对最后5个葡萄酒样本进行归类。请注意,在这里我们需要将样本也进行归一化处理。
```python
import numpy as np
# 最后5个葡萄酒的数据
unknown_data = np.array([[14.23, 1.71, 2.43, 15.6, 127.0, 2.8, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0],
[13.71, 5.65, 2.45, 20.5, 95.0, 1.68, 0.61, 0.52, 1.06, 7.7, 0.64, 1.74, 740.0],
[13.4, 3.91, 2.48, 23.0, 102.0, 1.8, 0.75, 0.43, 1.41, 7.3, 0.7, 1.56, 750.0],
[13.0, 4.6, 2.86, 19.5, 120.0, 2.86, 3.03, 0.17, 1.66, 5.1, 0.96, 2.06, 625.0],
[12.93, 2.81, 2.7, 21.0, 96.0, 1.54, 0.5, 0.53, 0.75, 4.6, 0.77, 2.31, 600.0]])
# 对最后5个葡萄酒数据进行归一化处理
unknown_data_norm = StandardScaler().fit_transform(unknown_data)
# 使用逻辑回归对葡萄酒进行分类
print('Logistic Regression Predictions: ', lr.predict(unknown_data_norm))
# 使用支持向量机对葡萄酒进行分类
print('SVM Predictions: ', svm.predict(unknown_data_norm))
```
输出结果:
```
Logistic Regression Predictions: [1 1 1 2 2]
SVM Predictions: [1 1 1 2 2]
```
我们可以看到,逻辑回归和支持向量机两个模型都将最后5个葡萄酒分为了两类,其中前三个被分类为第一类,后两个被分类为第二类。
阅读全文