且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感

更新时间:2022-09-25 23:11:50

本节书摘来异步社区《Python机器学习——预测分析核心算法》一书中的第2章,第2.5节,作者:【美】Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 用实数值属性预测实数值目标:评估红酒口感

红酒口感数据集包括将近1 500种红酒的数据。每一种红酒都有一系列化学成分的测量指标,包括酒精含量、挥发性酸、亚硝酸盐。每种红酒都有一个口感评分值,是三个专业评酒员的评分的平均值。问题是构建一个预测模型,输入化学成分的测量值,预测口感评分值,使之与评酒员的评分一致。

代码清单2-14为获得红酒数据集统计信息的代码。代码打印输出数据集的数值型统计信息,在代码清单的最后部分可以看到。代码还产生了归一化属性的箱线图,可以直观发现数据集中的异常点。图2-16为箱线图。数值型统计信息和箱线图都显示含有大量的边缘点。在对此数据集进行训练时要记住这一点。当分析预测模型的性能时,这些边缘点很可能就是分析模型预测错误的一个重要来源。

代码清单2-14 红酒数据统计信息-wineSummary.py

__author__ = 'mike_bowles'
import pandas as pd
from pandas import DataFrame
from pylab import *
import matplotlib.pyplot as plot

target_url = ("http://archive.ics.uci.edu/ml/machine-"
"learning-databases/wine-quality/winequality-red.csv")
wine = pd.read_csv(target_url,header=0, sep=";")

print(wine.head())

#generate statistical summaries
summary = wine.describe()
print(summary)

wineNormalized = wine
ncols = len(wineNormalized.columns)

for i in range(ncols):
    mean = summary.iloc[1, i]
    sd = summary.iloc[2, i]

wineNormalized.iloc[:,i:(i + 1)] = \
        (wineNormalized.iloc[:,i:(i + 1)] - mean) / sd
array = wineNormalized.values
boxplot(array)
plot.xlabel("Attribute Index")
plot.ylabel(("Quartile Ranges - Normalized "))
show()

Output - [filename - wineSummary.txt]
    fixed acidity volatil acid citric acid resid sugar chlorides
0             7.4          0.70       0.00         1.9     0.076
1             7.8          0.88       0.00         2.6     0.098
2             7.8          0.76       0.04         2.3     0.092
3            11.2          0.28       0.56         1.9     0.075
4             7.4          0.70       0.00         1.9     0.076

    free sulfur dioxide tot sulfur dioxide density   pH sulphates
0                    11                 34  0.9978 3.51      0.56
1                    25                 67  0.9968 3.20      0.68
2                    15                 54  0.9970 3.26      0.65
3                    17                 60  0.9980 3.16      0.58
4                    11                 34  0.9978 3.51      0.56

    alcohol quality
0       9.4       5
1       9.8       5
2       9.8       5
3       9.8       6
4       9.4       5
        fixed acidity volatile acidity citric acid residual sugar
count     1599.000000      1599.000000 1599.000000    1599.000000
mean         8.319637         0.527821    0.270976       2.538806
std          1.741096         0.179060    0.194801       1.409928
min          4.600000         0.120000    0.000000       0.900000
25%          7.100000         0.390000    0.090000       1.900000
50%          7.900000         0.520000    0.260000       2.200000
75%          9.200000         0.640000    0.420000       2.600000
max         15.900000         1.580000    1.000000      15.500000

         chlorides free sulfur dioxide tot sulfur dioxide     density
count  1599.000000         1599.000000        1599.000000 1599.000000
mean      0.087467           15.874922          46.467792    0.996747
std       0.047065           10.460157          32.895324    0.001887
min       0.012000            1.000000           6.000000    0.990070
25%       0.070000            7.000000          22.000000    0.995600
50%       0.079000           14.000000          38.000000    0.996750
75%       0.090000           21.000000          62.000000    0.997835
max       0.611000           72.000000         289.000000    1.003690

                pH   sulphates     alcohol     quality
count  1599.000000 1599.000000 1599.000000 1599.000000
mean      3.311113    0.658149   10.422983    5.636023
std       0.154386    0.169507    1.065668    0.807569
min       2.740000    0.330000    8.400000    3.000000
25%       3.210000    0.550000    9.500000    5.000000
50%       3.310000    0.620000   10.200000    6.000000
75%       3.400000    0.730000   11.100000    6.000000
max       4.010000    2.000000   14.900000    8.000000```

<div style="text-align: center"><img src="https://yqfile.alicdn.com/578ad5dab79e74a2a748ae50a20dba6ff4a43cd3.png" width="" height="">
</div>

加入颜色标记的平行坐标图更易于观察属性与目标的相关程度。代码清单2-15为生成平行坐标图的代码。图2-17为平行坐标图。图2-17的主要不足在于对取值范围较小的变量进行了压缩。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/311664f2c315332466e67a1b0b0998527ccdc0ca.png" width="" height="">
</div>

为了克服这个问题,代码清单2-15对红酒数据进行了归一化,然后重画了平行坐标图。图2-18为归一化之后的平行坐标图。

代码清单2-15 红酒数据的平行坐标图-wineParalleIPLot.Py

author = 'mike_bowles'
import pandas as pd
from pandas import DataFrame
from pylab import *
import matplotlib.pyplot as plot
from math import exp

target_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/
wine-quality/winequality-red.csv"
wine = pd.read_csv(target_url,header=0, sep=";")

generate statistical summaries

summary = wine.describe()
nrows = len(wine.index)
tasteCol = len(summary.columns)
meanTaste = summary.iloc[1,tasteCol - 1]
sdTaste = summary.iloc[2,tasteCol - 1]
nDataCol = len(wine.columns) -1

for i in range(nrows):

#plot rows of data as if they were series data
dataRow = wine.iloc[i,1:nDataCol]
normTarget = (wine.iloc[i,nDataCol] - meanTaste)/sdTaste
labelColor = 1.0/(1.0 + exp(-normTarget))
dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5)

plot.xlabel("Attribute Index")
plot.ylabel(("Attribute Values"))
plot.show()

wineNormalized = wine
ncols = len(wineNormalized.columns)

for i in range(ncols):

mean = summary.iloc[1, i]
sd = summary.iloc[2, i]
wineNormalized.iloc[:,i:(i + 1)] =
(wineNormalized.iloc[:,i:(i + 1)] - mean) / sd

Try again with normalized values

for i in range(nrows):

#plot rows of data as if they were series data
dataRow = wineNormalized.iloc[i,1:nDataCol]
normTarget = wineNormalized.iloc[i,nDataCol]
labelColor = 1.0/(1.0 + exp(-normTarget))
dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5)

plot.xlabel("Attribute Index")
plot.ylabel(("Attribute Values"))
plot.show()`
归一化红酒数据的平行坐标图可以更方便地观察出目标与哪些属性相关。图2-18展示了属性间清晰的相关性。在图的最右边,深蓝线(高口感评分值)聚集在酒精含量属性的高值区域;但是图的最左边,深红线(低口感评分值)聚集在挥发性酸属性的高值区域。这些都是最明显的相关属性。在第5章和第7章的预测模型中将会对属性基于对预测所做的贡献进行评分,我们会看到预测模型是如何支撑上述这些观察结果的。

《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感

图2-19为属性之间、属性与目标之间的关联热图。在这个热图中,暖色对应强相关(颜色标尺的选择与平行坐标图中的正好相反)。红酒数据的关联热图显示口感评分值(最后一列)与酒精含量(倒数第二列)高度正相关,但是与其他几个属性(包括挥发性酸等)高度负相关。

《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感

分析红酒数据所用的工具在前面都已经介绍和使用过。红酒数据集展示了这些工具可以揭示的信息。平行坐标图和关联热图都说明酒精含量高则口感评分值高,然而挥发性酸高则口感评分值低。在第5、第7章可以看到,预测模型中的一部分工作就是研究各种属性对预测的重要性。红酒数据集就是一个很好的例子,展示了如何通过探究数据来知晓向从哪个方向努力来构建预测模型以及如何评价预测模型。下节将探究多类别分类问题的数据集。