分类3:机器学习处理read-wine(红酒)数据集代码

1 介绍

红酒分类数据集属于分类问题,共有13个特征,类别共有10个,因此属于分类问题,我们使用svm、knn、决策树、随机森林等方法对其进行分析,本文还包含PCA降维数据可视化超参数数据归一化等操作,代码可以直接跑通。
数据集连接:
链接:https://pan.baidu.com/s/1mncFxgyGQY9165AdvIFKCg?pwd=4chf
提取码:4chf

2 导入常用的工具箱

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler,MinMaxScaler
np.random.seed(123)

3 导入数据集

导入数据集,并且完成简单的数据可视化操作

data = pd.read_csv("winequality-red.csv")
print(data.describe())

data.hist()
plt.show()

在这里插入图片描述
数据集划分,使用train_test_split划分,指定训练集占所有数据集比例0.7

x = data.drop(["quality"], axis=1)
y = data["quality"]
X_train, X_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=123)
print("数据集整体数量:{}".format(len(x)))
print("训练集集整体数量:{}".format(len(X_train)))
print("测试集整体数量:{}".format(len(X_test)))
数据集整体数量:1599
训练集集整体数量:1119
测试集整体数量:480

4 MinMaxScaler归一化

scaler = MinMaxScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

5 分别使用svm、knn、决策树、随机森林进行实验

clf = SVC()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
svm_acc = accuracy_score(y_test, y_pred)
print("svm模型精度:{}".format(svm_acc))


clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
dt_acc = accuracy_score(y_test, y_pred)
print("dt模型精度:{}".format(dt_acc))

clf = RandomForestClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
rf_acc = accuracy_score(y_test, y_pred)
print("rf模型精度:{}".format(rf_acc))

clf = KNeighborsClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
knn_acc = accuracy_score(y_test, y_pred)
print("knn模型精度:{}".format(knn_acc))
svm模型精度:0.5833333333333334
dt模型精度:0.5645833333333333
rf模型精度:0.6541666666666667
knn模型精度:0.5666666666666667

通过结果可以看出随机森林效果最好.

6 使用PCA降维,然后使用随机森林进行分类

n_components = 8
pca = PCA(n_components= n_components)
pca.fit(X_train)
X_train = pca.transform(X_train)
X_test = pca.transform(X_test)
clf = RandomForestClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
rf_acc = accuracy_score(y_test, y_pred)
print("pca维度为:{}, rf模型精度:{}".format(n_components, rf_acc))
pca维度为:8, rf模型精度:0.6791666666666667

通过结果,我们发现使用pca,精度提升了.

7 GridSearchCV调整rf的参数

我们只保留每次超参数调优时最好的结果,并且结合pca进行遍历。

param_grid = {"n_estimators":[10, 20, 50, 100]}
best_score = 0.0
for n_components in range(2, 10,2):
    pca = PCA(n_components=n_components)
    pca.fit(X_train)
    X_train_pca = pca.transform(X_train)
    clf = RandomForestClassifier()
    grid_search = GridSearchCV(clf, param_grid, cv=5)# 使用5折交叉验证
    grid_search.fit(X_train_pca,y_train)
    if grid_search.best_score_ > best_score:
        best_score = grid_search.best_score_
        best_pca = n_components
        best_rf_param = grid_search.best_params_
    print("pca维度为:{}, rf参数为:{}, rf模型精度:{}".format(n_components, grid_search.best_params_, grid_search.best_score_))
pca维度为:2, rf参数为:{'n_estimators': 100}, rf模型精度:0.6050128122998079
pca维度为:4, rf参数为:{'n_estimators': 100}, rf模型精度:0.6416359705317104
pca维度为:6, rf参数为:{'n_estimators': 50}, rf模型精度:0.6469971172325433
pca维度为:8, rf参数为:{'n_estimators': 20}, rf模型精度:0.670199391415759
  • 5
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小葱鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值