Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

这篇具有很好参考价值的文章主要介绍了Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

下面对天池项目中的红酒数据集进行分析与挖掘

实现步骤

1:导入模块

2:颜色和打印精度设置

3:获取数据并显示数据维度

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

字段中英文对照表如下

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

然后利用describe函数显示数值属性的统计描述值

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 显示quality取值的相关信息

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

显示各个变量的直方图如下

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 显示各个变量的盒图

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

酸性相关的特征分析 该数据集与酸度相关的特征有’fixed acidity’, ‘volatile acidity’, ‘citric acid’,‘chlorides’, ‘free sulfur dioxide’, ‘total sulfur dioxide’,‘PH’。其中前6中酸度特征都会对PH产生影响。PH在对数尺度,然后对6中酸度取对数做直方图

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

pH值主要是与fixed acidity有关,fixed acidity比volatile acidity和citric acid高1到2个数量级(Figure 4),比free sulfur dioxide, total sulfur dioxide, sulphates高3个数量级。   一个新特征total acid来自于前三个特征的和

 甜度(sweetness) residual sugar主要与酒的甜度有关,干红(<= 4g/L),半干(4-12g/L),半甜(12-45g/L),甜(>= 45g/L),该数据集中没有甜葡萄酒

绘制甜度的直方图如下

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 绘制不同品质红酒的各个属性的盒图

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

从上图可以看出:

红酒品质与柠檬酸,硫酸盐,酒精度成正相关 红酒品质与易挥发性酸,密度,PH成负相关 残留糖分,氯离子,二氧化硫对红酒品质没有什么影响

下面分析密度和酒精浓度的关系

密度和酒精浓度是相关的,物理上,但两者并不是线性关系。另外密度还与酒精中的其中物质含量有关,但是相关性很小

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细) 

 酸性物质含量和PH 因为PH和非挥发性酸之间存在着-0.68的相关性,因为非挥发性酸的总量特别高,所以total acid这个指标意义不大

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

多变量分析 与红酒品质相关性最高的三个特征分别是酒精浓度,挥发性酸含量,柠檬酸。下面研究三个特征对红酒的品质有何影响

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

PH和非挥发性酸,柠檬酸成负相关

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

总结 对于红酒品质影响最重要的三个特征:酒精度、挥发性酸含量和柠檬酸。对于品质高于7的优质红酒和品质低于4的劣质红酒,直观上线性可分,对于品质为5和6的红酒很难进行线性区分

 随机森林、线性回归等算法部分

对数据类型编码,将数据集划分为训练集和测试集等等

对比原始数据与做了标准化处理的数据,其结果相差不大,所以该数据集不需要做标准化处理

下面我们展示各种算法的预测精度结果

可以发现误差都比较大,其中随机森林误差较高

Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

 代码

部分代码如下 需要全部代码请点赞关注收藏后评论区留言私信~~~

#!/usr/bin/env python
# coding: utf-8

# ## 数据分析部分

# In[1]:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# from sklearn.datasets import load_wine


# In[2]:


# 颜色
color = sns.color_palette()
# 数据print精度
pd.set_option('precision',3) 


# In[3]:


df = pd.read_csv('.\winequality-red.csv',sep = ';')
display(df.head())
print('数据的维度:',df.shape)


# ![image.png](attachment:image.png)

# In[4]:


df.info()


# In[5]:


df.describe()


# In[6]:


print('quality的取值:',df['quality'].unique())
print('quality的取值个数:',df['quality'].nunique())
print(df.groupby('quality').mean())


# 显示各个变量的直方图

# In[ ]:





# In[7]:


color = sns.color_palette()
column= df.columns.tolist()
fig = plt.figure(figsize = (10,8))
for i in range(12):
    plt.subplot(4,3,i+1)
    df[column[i]].hist(bins = 100,color = color[3])
    plt.xlabel(column[i],fontsize = 12)
    plt.ylabel('Frequency',fontsize = 12)
plt.tight_layout()


# 显示各个变量的盒图

# In[8]:


fig = plt.figure(figsize = (10,8))
for i in range(12):
    plt.subplot(4,3,i+1)
    sns.boxplot(df[column[i]],orient = 'v',width = 0.5,color = color[4])
    plt.ylabel(column[i],fontsize = 12)
plt.tight_layout()


# 酸性相关的特征分析
# 该数据集与酸度相关的特征有’fixed acidity’, ‘volatile acidity’, ‘citric acid’,‘chlorides’, ‘free sulfur dioxide’, ‘total sulfur dioxide’,‘PH’。其中前6中酸度特征都会对PH产生影响。PH在对数尺度,然后对6中酸度取对数做直方图。

# In[9]:


acidityfeat = ['fixed acidity', 
				'volatile acidity', 
				'citric acid', 
				'chlorides', 
				'free sulfur dioxide', 
				'total sulfur dioxide',]

fig = plt.figure(figsize = (10,6))
for i in range(6):
    plt.subplot(2,3,i+1)
    v = np.log10(np.clip(df[acidityfeat[i]].values,a_min = 0.001,a_max = None))
    plt.hist(v,bins = 50,color = color[0])
    plt.xlabel('log('+ acidityfeat[i] +')',fontsize = 12)
    plt.ylabel('Frequency')    
plt.tight_layout()


# In[10]:


plt.figure(figsize=(6,3))

bins = 10**(np.linspace(-2,2)) # linspace 默认50等分
plt.hist(df['fixed acidity'], bins=bins, edgecolor = 'k', label='Fixed Acidity') #bins: 直方图的柱数,可选项,默认为10
plt.hist(df['volatile acidity'], bins=bins, edgecolor = 'k', label='Volatitle Acidity')#label:字符串或任何可以用'%s'转换打印的内容。
plt.hist(df['citric acid'], bins=bins, edgecolor = 'k', label='Citric Acid')
plt.xscale('log')
plt.xlabel('Acid Concentration(g/dm^3)')
plt.ylabel('Frequency')
plt.title('Histogram of Acid Contacts')#title :图形标题
plt.legend()#plt.legend()函数主要的作用就是给图加上图例
plt.tight_layout()

print('Figure 4')
"""
pH值主要是与fixed acidity有关,
fixed acidity比volatile acidity和citric acid高1到2个数量级(Figure 4),比free sulfur dioxide, total sulfur dioxide, sulphates高3个数量级。
   一个新特征total acid来自于前三个特征的和。
"""


# 甜度(sweetness)
# residual sugar主要与酒的甜度有关,干红(<= 4g/L),半干(4-12g/L),半甜(12-45g/L),甜(>= 45g/L),该数据集中没有甜葡萄酒。

# In[11]:


df['sweetness'] = pd.cut(df['residual sugar'],bins = [0,4,12,45],labels = ['dry','semi-dry','semi-sweet'])
df.head()


# In[12]:


plt.figure(figsize = (6,4))
df['sweetness'].value_counts().plot(kind = 'bar',color = color[0])
plt.xticks(rotation = 0)
plt.xlabel('sweetness')
plt.ylabel('frequency')
plt.tight_layout()
print('Figure 5')


# In[13]:


# 创建一个新特征total acid
df['total acid'] = df['fixed acidity'] + df['volatile acidity'] + df['citric acid']

columns = df.columns.tolist()
columns.remove('sweetness')
# columns

# ['fixed acidity',
#  'volatile acidity',
#  'citric acid',
#  'residual sugar',
#  'chlorides',
#  'free sulfur dioxide',
#  'total sulfur dioxide',
#  'density',
#  'pH',
#  'sulphates',
#  'alcohol',
#  'quality',
#  'total acid']
sns.set_style('ticks')
sns.set_context('notebook',font_scale = 1.1)

column = columns[0:11] + ['total acid']
plt.figure(figsize = (10,8))
for i in range(12):
    plt.subplot(4,3,i+1)
    sns.boxplot(x = 'quality',y = column[i], data = df,color = color[1],width = 0.6)
    plt.ylabel(column[i],fontsize = 12)
plt.tight_layout()

print('Figure 7:PhysicoChemico Propertise and Wine Quality by Boxplot')


# 从上图可以看出:
# 
# 红酒品质与柠檬酸,硫酸盐,酒精度成正相关
# 红酒品质与易挥发性酸,密度,PH成负相关
# 残留糖分,氯离子,二氧化硫对红酒品质没有什么影响

# In[14]:


sns.set_style('dark')
plt.figure(figsize = (10,8))
mcorr = df[column].corr()
mask = np.zeros_like(mcorr,dtype = np.bool)
mask[np.triu_indices_from(mask)] = True
cmap = sns.diverging_palette(220, 10, as_cmap=True)
g = sns.heatmap(mcorr, mask=mask, cmap=cmap, square=True, annot=True, fmt='0.2f')

# print('Figure 8:Pairwise colleration plot')


# In[ ]:





# In[15]:


# 密度和酒精浓度
# 密度和酒精浓度是相关的,物理上,但两者并不是线性关系。另外密度还与酒精中的其中物质含量有关,但是相关性很小。

sns.set_style('ticks')
sns.set_context('notebook',font_scale = 1.4)

plt.figure(figsize = (6,4))
sns.regplot(x = 'density',y = 'alcohol',data = df,scatter_kws = {'s':10},color = color[1])
plt.xlabel('density',fontsize = 12)
plt.ylabel('alcohol',fontsize = 12)

plt.xlim(0.989,1.005)
plt.ylim(7,16)

# print('Figure 9: Density vs Alcohol')


# 酸性物质含量和PH
# 因为PH和非挥发性酸之间存在着-0.68的相关性,因为非挥发性酸的总量特别高,所以total acid这个指标意义不大。

# In[16]:


column


# In[17]:


acidity_raleted = ['fixed acidity','volatile acidity','total sulfur dioxide','chlorides','total acid']

plt.figure(figsize = (10,6))

for i in range(5):
    plt.subplot(2,3,i+1)
    sns.regpltx = 'pH',y = acidity_raleted[i],data = df,scatter_kws = {'s':10},color = color[1])
    plt.xlabel('PH',fontsize = 12)
    plt.ylabel(acidity_raleted[i],fontsize = 12)
    
plt.tight_layout()
print('Figure 10:The correlation between different acid and PH')


# 多变量分析
# 与红酒品质相性最高的三个特征分别是酒精浓度,挥发性酸含量,柠檬酸。下面研究三个特征对红酒的品质有何影响。

# In[18]:


plt.style.use('ggplot')

plt.figure(figsize = (6,4))
sns.lmplot(x = 'alcohol',y = 'volatile acidity',hue = 'quality',data = df,fit_reg = False,scatter_kws = {'s':10},size = 5)
# In[19]:


sns.lmplot(x = 'alcohol', y = 'volatile acidity', col='quality', hue = 'quality', 
           data = df,fit_reg = False, size = 3,  aspect = 0.9, col_wrap=3,
           ={'s':20})
print("Figure 11-2: Scatter Plots of Alcohol, Volatile Acid and Quality")

# PH和非挥发性酸,柠檬酸
# PH和非挥发性酸,柠檬酸成负相关
# In[20]:


sns.set_style('ticks')
sns.set_context("notebook", font_scale= 1.4)

plt.figure(figsize=(6,5))
cm = plt.cm.get_cmap('RdBu')
sc = plt.scatter(df['fixed acidity'], df['citric acid'], c=df['pH'], vmin=2.6, vmax=4, s=15, cmap=cm)
bar = plt.colorbar(sc)
bar.n = 0)
plt.xlabel('fixed acidity')
plt.ylabel('ciric acid')
plt.xlim(4,18)
plt.ylim(0,1)
print('Figure 12: pH with Fixed Acidity and Citric Acid')


# 总结
# 对于红酒品质影响最重要的三个特征:酒精度、挥发性酸含量和柠檬酸。对于品质高于7的优质红酒和品质低于4的劣质红酒,直观上线性可分,对于品质为5和6的红酒很难进行线性区分。

# ## 数据掘时间部分

# In[21]:


# 数据建模
# 线性回归
# 集成算法
# 提升算
# 模型评估
# 确定模型参数
# 1.数据集切分
# 1.1 切分特征和标签
# 1.2 切分训练集个测试集

df.head()


# In[22]:


# 数据预处理工作

# 检查数据的完整性
df.isnull().sum()


# In[23]:


# 将object类型的数据转化为int类型
sweetness = pd.get_dummies(df['sweetness'])
df = pd.concat([df,sweetness],axis = 1)
df.head()


# In[24]:


df = df.drop('sweetness',axis = 1)
labels = df['quality']
features = df.drop('quality',axis = 1)
# 对原始数据集进行切分
from sklearn.model_selection import train_test_split
train_features,test_fatures,train_labels,test_labels = train_test_split(features,labels,test_size = 0.3,random_state = 0
print('训练特征的规模:'.shape)
print('训练标签的规模:',train_labels.shape)
print('测试特征的规模:',test_features.shape)
print('测试标签的规模:',test_labels.shape)


# In[25]:


from sklearn import svm
classifier=svm.SVC(kernel='linear',gamma=0.1)
classifier.fit(train_features,train_labels)
print('训练集的准确率',classifier.score(train_features,train_labels))
print('测试集的准确率',classifier.score(test_features,test_labels))


# In[26]:


from sklearn.linear_model import LinearRegression
LR = LinearRegression)LR.fit(train_features,train_labels
prediction = LR.predict(test_features)
prediction[:5]


# In[27]:


#对模型进行评估
from sklearn.metrics import mean_squared_error
RMSE = np.sqrt(mean_squared_error(test_labels,prediction))
print('线性回归模型的预测误差:',RMSE)


# In[28]:


# 对训练特征和测试特征做标准化处理,观察结果

from sklearn.preprocessing import StandardScaler
train_features_std = StandardScaler().fit_transform(train_features)
test_features_std = StandardScaler().fit_transform(test_features)
LR = LinearRegression()
LR.fit(train_features_std,train_labels)
prediction = LR.predict(test_features_std)

#观察预测结果误差
RMSE = np.sqrt(mean_squared_error(prediction,test_labels))
print('线性回归模型预测误差:',RMSE)


# 对比原始数据与做了标准化处理的数据,其结果相差不大,所以该数据集不需要做标准化处理。
# 
# 集成算法:随机森林

# In[29]:


from sklearn.ensemble import RandomForestRegressor
RF = RandomForestRegressor()
RF.fit(train_features,train_labels)
prediction = RF.pre

# In[30]:


RF.get_params


# In[31]:


from sklearn.model_selection import GridSearchCV
param_grid = {'n_estimators':[100,200,300,400,500],
             'max_depth':[3,4,5,6],
             'min_samples_split':[2,3,4]}

RF = RandomForestRegressor()
grid = GridSearchCV(RF,param_grid = param_grid,scoring = 'neg_mean_squared_error',cv = 3,n_jobs = -1)
grid.fit(train_features,train_labels)


# In[32]:


# GridSearchCV(cv=3, error_score='raise-deprecating',
#        estimator=RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,
#            max_features='auto', max_leaf_nodes=None,
#            min_impurity_decrease=0.0, min_impurity_split=None,
#            min_samples_leaf=1, min_samples_split=2,
#            min_weight_fraction_leaf=0.0, n_estimators='warn', n_jobs=None,
#            oob_sc

# In[33]:


grid.best_params_


# In[34]:


RF = RandomForestRegressor(n_estimators = 300,min_samples_split = 2,max_depth = 6)

RF.fit(train_features,train_labels)


# In[35]:


RandomForestRe

# In[36]:


prediction = RF.predict(test_features)

RF_RMSE = np.sqrt(mean_squared_error(prediction,test_labels))
print('随机森林模型的预测误差:',RF_RMSE)


# 集成算法:GBDT

# In[37]:


from sklearn.ensemble import GradientBoostingRegressor

GBDT = GradientBoostingRegressor()
GBDT.fit(train_features,train_labels)
gbdt_prediction =
GBDT.get_params


# In[ ]:




创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-411897.html

到了这里,关于Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python大数据之随机森林(回归与分类)

    随机森林在大数据运用中非常的常见,它在预测和回归上相比于SVM,多元线性回归,逻辑回归,多项式回归这些,有着比较好的鲁棒性。 随机森林是一个用随机方式建立的,包含多个决策树的分类器。其输出的类别是由各个树输出的类别的众数而定。 优点: 处理高纬度的数

    2024年02月02日
    浏览(29)
  • 基于随机森林模型的红酒品质分析

    ​ 数据集:Wine Quality Data Set UCI葡萄酒数据集https://archive.ics.uci.edu/ml/datasets/wine+quality ​ 通过网站上数据集的摘要了解数据集的基本情况吗,发现UCI葡萄酒数据集包括两份:葡萄牙北部的红色和白色葡萄酒样本 ​ 该样本常用于数据分析和机器学习分类等任务 ​ 选择红葡萄酒

    2024年02月03日
    浏览(45)
  • 机械学习模型训练常用代码(随机森林、聚类、逻辑回归、svm、线性回归、lasso回归,岭回归)

    更多pandas操作请参考添加链接描述pandas对于文件数据基本操作 导入的包sklearn 字符串编码处理,LabelEncoder TfidfVectorizer结合TruncatedSVD 排除某一列,例如 如果需要用到回归则换成RandomForestRegressor 数据在dc_matrix里面 绘制距离 #加入到表里面 师范,保存文本模型,使用其转换,调

    2023年04月14日
    浏览(34)
  • 通过向量回归、随机森林回归、线性回归和K-最近邻回归将预测结果绘制成图表进行展示

    附件里会给出全部数据链接 导入需要用到的Python库。pandas用于处理数据,numpy用于科学计算,matplotlib.pyplot用于绘图,FontProperties用于设置字体属性。在这里我们导入了中文字体PingFang Bold.ttf,以后进行绘图时就可以使用这个字体了。 打开了名为“中国各地现货棉花价格.xlsx”

    2024年02月08日
    浏览(28)
  • Python数据分析案例05——影响经济增长的因素(随机森林回归)

    在计量经济学里面的研究,围绕着影响GDP的因素的研究有很多,基本都是做回归,拿GDP作为被解释变量y,其他因素作为解释变量x。然后做线性回归,时间序列就做自回归,面板数据就做固定效应等等。本次案例采用机器学习里面的随机森林回归来研究影响经济增长的因素,

    2024年02月09日
    浏览(30)
  • 模型应用系实习生-模型训练笔记(更新至线性回归、Ridge回归、Lasso回归、Elastic Net回归、决策树回归、梯度提升树回归和随机森林回归)

    本次训练的变量是一致对应的,训练准备通过后,后续建模都不会有报错的! scikit-learn包以及镜像 必须全部为数字类型且无空值才能进行训练,关于非数据类型需要进行相对处理例如:可以采用独热编码或者label编码进行处理。 本文演示的是pandas 的dataframe数据类型的操作,

    2024年02月06日
    浏览(31)
  • python实现对森林生物量进行随机森林回归预测

    随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用。我们以光学影像为例,来估测森林生物量。 1、线性关系:回归关系应该是线性的,即自变量和因变量之间的关系应该是线性的。 2、独立性:自变量之间应该是独立

    2024年02月17日
    浏览(30)
  • 随机森林回归算法的Python实现与应用

         随机森林回归是一种集成学习算法,通过组合多个决策树来实现回归任务,构建多个决策树,并将它们组合成一个强大的回归模型。本文将会从随机森林回归算法的算法原理、Python实现及实际应用进行详细说明。     在现在的数据分析及数学建模等竞赛中,机器学习算

    2024年02月12日
    浏览(30)
  • Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 1.项目背景 Stacking通常考虑的是异质弱学习器(不同的学习算法被组合在一起),stacking学习用元模型组合基础模型。stacking 的概念是学习几个不

    2024年02月01日
    浏览(33)
  • PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化...

    1 利用 python 爬取链家网公开的租房数据; 2 对租房信息进行分析,主要对房租相关特征进行分析,并搭建模型用于预测房租 ( 点击文末“阅读原文”获取完整 代码数据 ) 。 相关视频 利用上海链家网站租房的公开信息,着重对月租进行数据分析和挖掘。 此数据来自 Lianj

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包