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

本节书摘来异步社区《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```

578ad5dab79e74a2a748ae50a20dba6ff4a43cd3.png

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

311664f2c315332466e67a1b0b0998527ccdc0ca.png

为了克服这个问题,代码清单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章的预测模型中将会对属性基于对预测所做的贡献进行评分,我们会看到预测模型是如何支撑上述这些观察结果的。

561618510ff3d99ac857c5cd6e6feb524fd74215.png

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

515ae037adcca7d83408bbb139d3b80531626b2b.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值