美文网首页
基于随机森林模型的红酒品质分析

基于随机森林模型的红酒品质分析

作者: L咯咯哒 | 来源:发表于2020-07-03 21:18 被阅读0次

本文源自MOOC南京大学《用Python玩转数据》张莉老师讲解,如有侵权会及时删除。
在老师的讲解上加入了更多的注释,希望方便大家理解。
首先附上数据集
数据集:http://archive.ics.uci.edu/ml/datasets/Wine+Quality

下面开始放代码

  1. 首先调用库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
import warnings
warnings.filterwarnings('ignore')
  1. 导入数据
try:
    wine = pd.read_csv('C:/Users/Desktop/winequality-red.csv',sep = ';')
except:
    print('cannot find the file')#导入数据完毕

这里说明一点,如果数据集放在.spyder-py3文件夹下就可以直接调用,否则的话,需要写路径。如上,我就是写出了文件存放路径,可以通过右键文件查找路径。

下面看数据的基本情况,由于本数据集没有缺失值所以没有处理,但是查看了数据集的重复值并进行了删除。

print(wine.info())#看数据的基本情况,一共有1599条非空数据,有12个属性
print(wine.duplicated())#检查是否有重复记录,有的话是True,没有是False
print(wine.duplicated().sum())#sum显示有多少条重复记录
wine = wine.drop_duplicates()#删除重复记录
print(wine)

数据基本情况,一共有1599条非空数据,有12个属性


image.png

检查是否有重复记录,有的话是True,没有是False


image.png
  1. 看数据的基本属性值
print(wine.describe())#看数据的基本属性
print(wine.quality.value_counts())#qulity属性具体每一类有多少个值,可以看出符合正态分布
image.png

5.做饼状图

wine.quality.value_counts().plot(kind = 'pie', autopct = '%.2f')#绘制饼图
plt.show()
  1. 看quality与其他属性的相关性
print(wine.corr().quality)#检查quality与其他属性的皮尔逊相关指数
plt.subplot(121)#将区域划分为一行两列,选择左边区域
sns.barplot(x = 'quality', y = 'volatile acidity', data = wine)#每一个quality对应的volatile acidity的均值分布
plt.subplot(122)#将区域划分为一行两列,选择右边区域
sns.barplot(x = 'quality', y = 'alcohol', data = wine)#比如棕色的,quality值为8,对应的alcohol的均值。alcohol越高,quality越高
plt.show()

可以看出volatile acidity和alcohol的指数接近0.5,是相对较高的


image.png

进行可视化,可以看出alcogol越高,quality越高;volarile acidity越低,quality越高。


image.png
from sklearn.preprocessing import LabelEncoder
bins = (2,4,6,8)#bins构成左开右闭区间(2,4】,(4,6】,(6,8】,将quality分为三类
group_names = ('low','medium','high')#对三组建立组名
wine['quality_lb'] = pd.cut(wine['quality'],bins = bins, labels = group_names)#使用cut划分数据
print(wine)
lb_quality = LabelEncoder()
wine['label'] = lb_quality.fit_transform(wine['quality_lb'])
print(wine)#将quality等级分为0,1,2;增加了一个新列
df = wine
print(df.head(20))#通过展示前20行,我们可以看到1表示low,2表示medium,0表示high
print(wine.label.value_counts())#统计新类别的分类
wine_copy = wine.copy()
wine.drop(['quality','quality_lb'], axis = 1, inplace = True)#处理成11个特征属性和label列
x = wine.iloc[:,:11]#逗号左边表示行数,此处显示全部行数;逗号右边表示列数,此处表示11列,也可以写成:-1 11个都为特征属性,存入x
y = wine.label#label为目标属性,存入y
print(x,y)
from sklearn.model_selection import train_test_split#要将数据集划分为测试集和训练集
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = 0.2)#随机选取比例,80%作为训练集,20%作为测试集

添加了quality_lb 和 label


image.png

展示前20行,注明,第4、11行缺失是由于是重复值,因此删除了


image.png
每个等级的数据数
image.png
from sklearn.preprocessing import scale#对训练集和测试集都进行标准化处理
x_train = scale(x_train)
x_test = scale(x_test)

from sklearn.metrics import confusion_matrix
rfc = RandomForestClassifier(n_estimators = 200)#使用随机森林函数构建一个分类器,利用最大投票数或者均值来预测前,想要建立子树的数量多的数量会有更好的效果,代码会变慢
rfc.fit(x_train, y_train)#使用fit进行训练
y_pred = rfc.predict(x_test)#使用predict进行预测
print(confusion_matrix(y_test,y_pred))#将实际y值与预测结果比较,判断模型预测效果,使用混淆矩阵
image.png

对混淆矩阵做说明



混淆矩阵每一列代表预测值,每一行代表实际的类别。对角线上的个数就是正确判断出类别的数据记录个数,其他位置是类别误判的个数,对角线上的占比越大表示分类效果越好。
15表示类别0判断正确的个数,总的类别0的个数是15+25
25表示本来应该是类别0的个数,误判成了类别2
类别2的精度最高,217个正确,只有6个被误判成了类别0

  1. 参数,GridSearchCV是暴力搜索,把参数输入进去,就能给出最优化的结果,适合于小数据集
param_rfc = {
            "n_estimators":[10,20,30,40,50,60,70,80,90,100,150,200],#选取的参数
             "criterion":["gini","entropy"]
             }
grid_rfc = GridSearchCV(rfc, param_rfc, iid = False, cv = 5)
grid_rfc.fit(x_train, y_train)
best_param_rfc = grid_rfc.best_params_
print(best_param_rfc)#保存的是已经取得最佳结果的参数组合
  1. 重新预测
#重新预测
rfc = RandomForestClassifier(n_estimators = best_param_rfc['n_estimators'], criterion = best_param_rfc['criterion'],random_state=0)
rfc.fit(x_train, y_train)
y_pred = rfc.predict(x_test)
print(confusion_matrix(y_test,y_pred))

得到矩阵


image.png

以上是老师讲解的全部代码,本人也是初学者,后面的随机森林模型还有很多需要学习的地方,希望可以跟大家一起交流。

相关文章

  • 基于随机森林模型的红酒品质分析

    本文源自MOOC南京大学《用Python玩转数据》张莉老师讲解,如有侵权会及时删除。在老师的讲解上加入了更多的注释...

  • Test Jianshu

    基于随机森林回归预测的风机预警模型开发

  • Learning Spark [9] - MLlib库 - Tr

    基于树模型(Tree-Based Models) 基于树模型,比如决策树,梯度提升树,随机森林等,相对比回归模型,...

  • 微生物多样研究—差异分析

    1. 随机森林模型 随机森林是一种基于决策树(Decisiontree)的高效的机器学习算法,可以用于对样本进行分...

  • 待学清单

    算法原理 回归模型(线性+逻辑) 固定、随机、混合效应模型 时间序列分析 决策树与随机森林 判断差异的方法:t检验...

  • python机器学习模型调参

    1. 基于scikit-learn的RandomForestRegressor构建一个随机森林回归模型 sklea...

  • 模型融合

    一、模型融合的方式主要是有三种:1.bagging (随机森林模型是基于bagging融合的代表)2.boosti...

  • 随机森林算法

    1.随机森林使用背景 1.1随机森林定义 随机森林是一种比较新的机器学习模型。经典的机器学习模型是神经网络,有半个...

  • 催收评分卡模型开发

    催收评分卡模型简介 随机森林模型在还款率预测模型中的应用

  • 新2019计划:机器学习100天—随机森林【8】

    随机森林 随机森林是有监督的集成学习模型,主要用于分类和回归。随机森林建立了很多决策树,然后将其集成,以获得更准确...

网友评论

      本文标题:基于随机森林模型的红酒品质分析

      本文链接:https://www.haomeiwen.com/subject/jyeeqktx.html