《Python机器学习——预测分析核心算法》——2.6 多类别分类问题:它属于哪种玻璃

2.6 多类别分类问题:它属于哪种玻璃

多类别分类问题与二元分类问题类似,不同之处在于它有几个离散的输出,而不是只有两个。回顾探测未爆炸的水雷的问题,它的输出只有两种可能性:声纳探测的物体是岩石或者水雷。而红酒口感评分问题根据其化学成分会产生几个可能的输出(其口感评分值是从3分到8分)。但是对于红酒口感评分问题,口感评分值存在有序的关系。打5分的红酒要好于打3分的,但是要劣于打8分的。对于多类别分类问题,输出结果是不存在这种有序关系的。

此节将根据玻璃的化学成分来判断玻璃的类型,目标是确定玻璃的用途。玻璃的用途包括建筑房间用玻璃、车辆上的玻璃、玻璃容器等。确定玻璃的用途类型是为了鉴证。例如在一个车祸或犯罪现场,会有玻璃的碎片,确定这些玻璃碎片的用途、来源,有助于确定谁是过错方或者谁是罪犯。代码清单2-16为生成玻璃数据集的统计信息的代码。图2-20为归一化玻璃数据的箱线图,箱线图显示有相当数量的异常点。

代码清单2-16 玻璃数据集的统计信息-glassSummary.py

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

target_url = ("https://archive.ics.uci.edu/ml/machine-"
              "learning-databases/glass/glass.data")

glass = pd.read_csv(target_url,header=None, prefix="V")
glass.columns = ['Id', 'RI', 'Na', 'Mg', 'Al', 'Si',
                 'K', 'Ca', 'Ba', 'Fe', 'Type']

print(glass.head())

#generate statistical summaries
summary = glass.describe()
print(summary)
ncol1 = len(glass.columns)

glassNormalized = glass.iloc[:, 1:ncol1]
ncol2 = len(glassNormalized.columns)
summary2 = glassNormalized.describe()

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

glassNormalized.iloc[:,i:(i + 1)] = \
       (glassNormalized.iloc[:,i:(i + 1)] - mean) / sd

array = glassNormalized.values
boxplot(array)
plot.xlabel("Attribute Index")
plot.ylabel(("Quartile Ranges - Normalized "))
show()

Output: [filename - ]
print(glass.head())

 Id      RI    Na   Mg   Al    Si    K   Ca Ba Fe Type
0 1 1.52101 13.64 4.49 1.10 71.78 0.06 8.75  0  0    1
1 2 1.51761 13.89 3.60 1.36 72.73 0.48 7.83  0  0    1
2 3 1.51618 13.53 3.55 1.54 72.99 0.39 7.78  0  0    1
3 4 1.51766 13.21 3.69 1.29 72.61 0.57 8.22  0  0    1
4 5 1.51742 13.27 3.62 1.24 73.08 0.55 8.07  0  0    1

print(summary) - Abridged
              Id         RI         Na         Mg         Al
count 214.000000 214.000000 214.000000 214.000000 214.000000
mean  107.500000   1.518365  13.407850   2.684533   1.444907
std    61.920648   0.003037   0.816604   1.442408   0.499270
min     1.000000   1.511150  10.730000   0.000000   0.290000
25%    54.250000   1.516523  12.907500   2.115000   1.190000
50%   107.500000   1.517680  13.300000   3.480000   1.360000
75%   160.750000   1.519157  13.825000   3.600000   1.630000
max   214.000000   1.533930  17.380000   4.490000   3.500000
               K         Ca         Ba         Fe       Type
count 214.000000 214.000000 214.000000 214.000000 214.000000
mean    0.497056   8.956963   0.175047   0.057009   2.780374
std     0.652192   1.423153   0.497219   0.097439   2.103739
min     0.000000   5.430000   0.000000   0.000000   1.000000
25%     0.122500   8.240000   0.000000   0.000000   1.000000
50%     0.555000   8.600000   0.000000   0.000000   2.000000
75%     0.610000   9.172500   0.000000   0.100000   3.000000
max     6.210000  16.190000   3.15000  0 0.510000   7.000000```

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

玻璃数据的箱线图显示有相当数量的异常点,至少与前面的例子相比,异常点数量上是比较多的。玻璃数据集有几个因素可能会导致出现异常点。首先这是一个分类问题,在属性值和类别之间不需要存在任何连续性,也就是说不应期望在各种类别之间,属性值是相互接近的、近似的。另外一个玻璃数据比较独特的地方是它的数据是非平衡的。成员最多的类有76个样本,而成员最小的类只有9个样本。统计时,平均值可能是由成员最多的那个类的属性值决定,因此不能期望其他的类别也有相似的属性值。采取激进的方法来区分类别可能会达到较好的结果,但这也意味着预测模型需要跟踪不同类别之间复杂的边界。在第3章可以了解到,如果给定足够多的数据,集成方法可以比惩罚线性回归方法产生更复杂的决策边界。而在第5、第7章可以看到哪种方法可以获得更好的效果。

平行坐标图可能对此数据集揭示的信息更多。图2-21为其平行坐标图。数据根据输出类别用不同的颜色标记。有些类别区分度很好。例如,深蓝色的线聚集度很好,在某些属性上与其他类别的区分度也很好。深蓝的线在某些属性上经常处于数据的边缘,也就是说,是这些属性上的异常点。浅蓝的线在某些属性上也与深蓝的线一样,处于边缘地带,但是数量上要比深蓝的少,而且两者都在边缘地带时的所属的属性也不尽相同。棕色的线聚集性也很好,但其取值基本上在中心附近。

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

代码清单2-17为产生玻璃数据的平行坐标图的代码。针对岩石vs.水雷问题,平行坐标图的线用2种颜色代表了2种目标类别。在回归问题(红酒口感评分、鲍鱼预测年龄),标签(目标类别)取实数值,平行坐标图的线取一系列不同的颜色。在多类别分类问题中,每种颜色代表一种类别,共有6种类别,6种颜色。标签是1~7,没有4。颜色的选择与回归问题中的方式类似:将目标类别(标签)除以其最大值,然后再基于此数值选择颜色。图2-22为玻璃数据的关联热图。关联热图显示了属性之间绝大多数是弱相关的,说明属性之间绝大多数是相互独立的,这是件好事情。标签(目标类别)没有出现在热图中,因为目标(类别)只取几个离散值中的一个。不包括目标类别无疑减少了关联热图所能揭示的信息。

代码清单2-17 玻璃数据的平行坐标图-glassParallelPlot.py

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

target_url = ("https://archive.ics.uci.edu/ml/machine-"

          "learning-databases/glass/glass.data")

glass = pd.read_csv(target_url,header=None, prefix="V")
glass.columns = ['Id', 'RI', 'Na', 'Mg', 'Al', 'Si',

             'K', 'Ca', 'Ba', 'Fe', 'Type']

glassNormalized = glass
ncols = len(glassNormalized.columns)
nrows = len(glassNormalized.index)
summary = glassNormalized.describe()
nDataCol = ncols - 1

normalize except for labels

for i in range(ncols - 1):

mean = summary.iloc[1, i]
sd = summary.iloc[2, i]

glassNormalized.iloc[:,i:(i + 1)] = \

    (glassNormalized.iloc[:,i:(i + 1)] - mean) / sd

Plot Parallel Coordinate Graph with normalized values

for i in range(nrows):

#plot rows of data as if they were series data
dataRow = glassNormalized.iloc[i,1:nDataCol]
labelColor = glassNormalized.iloc[i,nDataCol]/7.0
dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5)

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

对玻璃数据的研究揭示了一个有趣的问题。具体地说,箱线图以及平行坐标图暗示了如果给定足够多的数据,采用集成方法是一个很好的选择。一系列的属性用来区分一个类别,明显类别之间会有复杂的边界。哪种算法会产生最佳的预测性能还有待进一步观察。本章学习的分析数据的方法已圆满完成了任务。它们可以帮助加深对问题的理解,通过各种权衡后可以更好地预判哪种算法可以获得较好的性能。

时间: 2024-10-06 22:55:11

《Python机器学习——预测分析核心算法》——2.6 多类别分类问题:它属于哪种玻璃的相关文章

《Python机器学习——预测分析核心算法》——2.2 分类问题:用声纳发现未爆炸的水雷

2.2 分类问题:用声纳发现未爆炸的水雷 此小节将介绍在分类问题上首先需要做的工作.首先是简单的测量:数据的规模.数据类型.缺失的数据等.接着是数据的统计特性.属性之间的关系.属性与标签之间的关系.本节的数据集来自UC Irvine 数据仓库(见参考文献1).数据来源于实验:测试声纳是否可以用于检测在港口军事行动后遗留下来的未爆炸的水雷.声纳信号又叫作啁啾信号(chirped signal),即信号在一个脉冲期间频率会增加或降低.此数据集的测量值代表声纳接收器在不同地点接收到的返回信号,其中在大

《Python机器学习——预测分析核心算法》——导读

前言 Python机器学习--预测分析核心算法 从数据中提取有助于决策的信息正在改变着现代商业的组织,同时也对软件开发人员产生了直接的影响.一方面是对新的软件开发技能的需求,市场分析师预计到2018年对具有高级统计和机器学习技术的人才需求缺口将达140000-190000人.这对具有上述技能的人员来说意味着丰厚的薪水和可供选择的多种有趣的项目.另一方面对开发人员的影响就是逐步出现了统计和机器学习相关的核心工具,这减轻了开发人员的负担.当他们尝试新的算法时,不需要重复发明"轮子".在所有

《Python机器学习——预测分析核心算法》——第1章 关于预测的两类核心算法

第1章 关于预测的两类核心算法 Python机器学习--预测分析核心算法 本书集中于机器学习领域,只关注那些最有效和获得广泛使用的算法.不会提供关于机器学习技术领域的全面综述.这种全面性的综述往往会提供太多的算法,但是这些算法并没有在从业者中获得积极的应用. 本书涉及的机器学习问题通常是指"函数逼近(function approximation)"问题.函数逼近问题是有监督学习(supervised learning)问题的一个子集.线性回归和逻辑回归是解决此类函数逼近问题最常见的算法

《Python机器学习——预测分析核心算法》——第2章 通过理解数据来了解问题

第2章 通过理解数据来了解问题 Python机器学习--预测分析核心算法新数据集(问题)就像一个包装好的礼物,它充满了承诺和希望.一旦你能解决它,你就收获了喜悦.但是直到你打开它,它都一直保持着神秘.本章就是告诉你怎么"打开"新的数据集,看清楚里面都有什么,知道如何处置这些数据,并且开始思考如何利用这些数据构建相应的模型. 本章有两个目的:一是熟悉这些数据集,这些数据集被用来作为解决各种类型问题的例子,主要是利用第4章和第6章介绍的算法:另一个目的就是展示Python中分析数据的工具包

《Python机器学习——预测分析核心算法》——1.6 各章内容及其依赖关系

1.6 各章内容及其依赖关系 依赖于读者的背景和是否有时间来了解基本原理,读者可以采用不同的方式来阅读本书.图1-7为本书各章之间的依赖关系. 第2章仔细审视各种数据集.这些数据集用于本书中的问题实例,用以说明算法的使用,以及各种算法之间基于性能和其他特征的比较.面对一个新的机器学习问题的起点就是深入专研数据集,深入理解数据集,了解它们的问题和特质.第2章的部分内容就是展示Python中可以用于数据集探索的一些工具集.可以浏览第2章中的部分例子,不需要阅读全部例子就可以了解整个流程,当在后续章节

《Python机器学习——预测分析核心算法》——1.1 为什么这两类算法如此有用

1.1 为什么这两类算法如此有用 有几个因素造就了惩罚线性回归和集成方法成为有用的算法集.简单地说,面对实践中遇到的绝大多数预测分析(函数逼近)问题,这两类算法都具有最优或接近最优的性能.这些问题包含:大数据集.小数据集.宽数据集(wide data sets)[1].高瘦数据集(tall skinny data sets)[2].复杂问题.简单问题,等等.Rich Caruana及其同事的两篇论文为上述论断提供了证据. 1."An Empirical Comparison of Supervi

《Python机器学习——预测分析核心算法》——2.4 基于因素变量的实数值预测:鲍鱼的年龄

2.4 基于因素变量的实数值预测:鲍鱼的年龄 探测未爆炸的水雷数据集的工具同样可以用于回归问题.在给定物理测量值的情况下,预测鲍鱼的年龄就是此类问题的一个实例.鲍鱼的属性中包括因素属性,下面将说明属性中含有因素属性后与上例有什么不同. 鲍鱼数据集的问题是根据某些测量值预测鲍鱼年龄.当然可以对鲍鱼进行切片,然后数年轮获得鲍鱼年龄的精确值,就像通过数树的年轮得到树的年龄一样.但是问题是这种方法代价比较大,耗时(需要在显微镜下数年轮).因此更方便经济的方法是做些简单的测量,如鲍鱼的长度.宽度.重量等指

《Python机器学习——预测分析核心算法》——2.1 “解剖”一个新问题

2.1 "解剖"一个新问题 本书介绍的算法通常是从一个充满了数字,可能是特征(变量)的矩阵(或表格)开始的.表2-1展示了一些术语,代表了一个小规模的二维机器学习数据集.此表提供了一个数据集的基本印象,这样对"列代表属性特征,行代表实例"等约定就比较熟悉.这个例子中的问题是预测下一年在线购买书籍所需花费的金额. 数据是按照行和列组织的.每行代表一个实例(或者叫一个例子.观察).在表2-1中每列指定相应的列名,用来指明在一个机器学习问题中所起的作用.标明为"

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

2.5 用实数值属性预测实数值目标:评估红酒口感 红酒口感数据集包括将近1 500种红酒的数据.每一种红酒都有一系列化学成分的测量指标,包括酒精含量.挥发性酸.亚硝酸盐.每种红酒都有一个口感评分值,是三个专业评酒员的评分的平均值.问题是构建一个预测模型,输入化学成分的测量值,预测口感评分值,使之与评酒员的评分一致. 代码清单2-14为获得红酒数据集统计信息的代码.代码打印输出数据集的数值型统计信息,在代码清单的最后部分可以看到.代码还产生了归一化属性的箱线图,可以直观发现数据集中的异常点.图2-