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

简介:

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

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()`

4b24ba17eac6cf4b36c2a643b5c5e9203fe6face

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

相关文章
|
21天前
|
机器学习/深度学习 传感器 数据采集
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)
110 0
|
6月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
227 7
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
2月前
|
机器学习/深度学习 人工智能 算法
AP聚类算法实现三维数据点分类
AP聚类算法实现三维数据点分类
114 0
|
4月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
685 12
Scikit-learn:Python机器学习的瑞士军刀
|
8月前
|
机器学习/深度学习 算法 数据可视化
利用SVM(支持向量机)分类算法对鸢尾花数据集进行分类
本文介绍了如何使用支持向量机(SVM)算法对鸢尾花数据集进行分类。作者通过Python的sklearn库加载数据,并利用pandas、matplotlib等工具进行数据分析和可视化。
626 70
|
7月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
6月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
6月前
|
机器学习/深度学习 资源调度 算法
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
|
6月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。

推荐镜像

更多