分类算法入门:以鸢尾花数据集为例(上)

简介: 分类算法入门:以鸢尾花数据集为例(上)




近两年人工智能技术蓬勃发展,OpenAI连续放出ChatGPT、Sora等“王炸”产品,大模型、AIGC等技术带来了革命性的提升,很多人认为人工智能将引领第四次工业革命。国内各大互联网公司也是重点投资布局,从个人角度来说要尽快跟上时代的潮流,有一句话说得好,“未来,淘汰你的不是AI,而是那些懂得运用AI的人!”。我们的初衷是从热火朝天的技术浪潮中回归冷静,深入理解和跟进AI技术的发展动态,并通过一系列实例解析,渐进式地引导读者掌握AI领域的知识体系。如今,我们决定将这些宝贵的学习资料公之于众,以期对广大初涉AI领域的学习者带来实质性的启迪和帮助。


引言

本文以经典的鸢尾花分类问题为切入点,生动详实地介绍传统机器学习任务中的分类任务所涉及的核心技术。我们将借助Python技术栈的强大工具——如pandas的数据处理功能、sklearn的机器学习算法库、matplotlib及seaborn的数据可视化工具以及numpy的科学计算能力,引领读者步入机器学习的奇妙世界,开启一场融合理性与艺术的探索之旅。
在探索具体的分类任务之前,我们先简介下人工智能的背景。人工智能的历史可以追溯到20世纪40-50年代。在1956年的达特茅斯会议上人工智能被正式确立为一个学科。人工智能(AI)是指使计算机系统具备模拟和模仿人类智能的能力,而机器学习(ML)是实现AI的一种方法,深度学习(DL)则是机器学习中使用深层神经网络模型的一种技术。下图[1]是他们三者之间的关系。

图1:人工智能(AI)、机器学习(ML)和深度学习(DL)之间的关系


机器学习算法有多种分类方法[2][3],从机器学习任务来分主要有分类、回归、聚类和降维等方法,本文从一个机器学习的经典任务“鸢尾花分类”为例,来介绍一些常见的数据分析方法和工具的使用。


图2:机器学习的多种分类方法


鸢尾花数据


在使用算法之前,我们先用统计和可视化工具对数据进行初步分析,这样便于直观理解数据的统计值、分布和相关性等信息。


工具:pandas、seaborn

方法:描述性统计、数据分布、相关性分析等

目的:从统计和视觉角度分析数据的基本情况


 数据集简介


鸢尾花包含很多种类,这个数据集包含 3 种:“山鸢尾”(Setosa),“杂色鸢尾”(Versicolor)和“维吉尼亚鸢尾”(Virginica)[1]。三种花在花萼(sepal)长度和宽度以及花瓣(petal)的长度和宽度上有非常明显的区别,详见下图所示:

图3:三种鸢尾花的花萼(sepal)以及花瓣(petal)的长度和宽度


这三个分类标签就是我们想要预测的分类,即因变量。其中,每个物种有50条数据,每条数据包含4个变量,我们把它称为自变量(或特征):花瓣长度、花瓣宽度、花萼长度、花萼宽度。花萼是由叶子演化而来,起到保护花蕾的作用。我们可以用pandas读取csv文件(读取为二维表格格式的DataFrame对象),然后看下前10条数据。



import pandas as pd
iris = pd.read_csv('./iris.csv',
                   names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
print(iris.head(10))


图4:鸢尾花数据集的前10条数据


可以用图形展示三个类别的数据(数据中0-50条,51~100条,101~150条是同一个类别未打散,正好可以看出三类数据的区别)。


iris.plot.line(stacked=False)


图5:三种类别鸢尾花的四个字段的真实值


使用pandas DataFrame的describe方法打印描述性统计信息。从中可以看出四个特征字段的各个统计值,如均值、方差、四分位数等。


iris.describe()


图6:鸢尾花数据集的描述性统计


结合numpy分组聚合方法打印不同鸢尾花类别的几个特征字段的均值。可以看出三类鸢尾花的花萼长宽、花瓣长宽等特征值有显著的区分。



import numpy as np
# 读取csv略过
print(iris.groupby(['class']).agg({
    'sepal_length': np.mean,
    'sepal_width': np.mean,
    'petal_length': np.mean,
    'petal_width': np.mean
}))


图7:三种类别鸢尾花的字段均值


 数据分布


  • 直方图


直方图是一种显示连续变量的分布情况的图表,通过将数据分成不同的区间(通常称为“bin”或“桶”),并统计每个区间中数据的频数或概率密度来展示数据的分布情况。直方图是由统计学家Karl Pearson在19世纪末引入的,它可以帮助我们了解数据的集中趋势、离散程度以及异常值情况。下面,使用直方图查看各个特征属性的分布区间。

iris.plot(kind='hist', subplots=True, layout=(2, 2), figsize=(10, 10))


图8:鸢尾花四个属性的直方图(分箱频数)


  • 核密度估计(KDE)


我们使用微分思想,将频率直方图的组距一步步减小,随着组距的减小,矩形宽度越来越小,因此,在极限情况下频率直方图就会变成一条曲线,而这条曲线即为概率密度曲线。核密度估计(kernel density estimation,简称 KDE)是一种用于估计这条曲线的概率密度函数(probability density function,PDF)的统计方法[14]。它通过对样本点周围使用内核函数(kernel function)加权平均来得到密度估计值。


核函数是一种用于估计概率密度函数的函数形式。通俗来说,核函数就是一个用来描述数据点附近密度的函数。核函数通常是一个关于距离的函数,它衡量了一个数据点附近的其他数据点对该位置的贡献。核密度估计的思想是将每个数据点作为中心,通过核函数来计算该位置附近的密度贡献值,然后将所有数据点的贡献值加起来得到整体的概率密度估计。常见的核函数有高斯核函数(也叫正态核函数)和Epanechnikov核函数。


通过概率密度曲线可以看出更细致的取值概率。

iris.plot(kind='kde')


图9:鸢尾花数据集四个变量的KDE曲线


当然,再加上各个鸢尾花类别,可以看2维KDE的分布。

'Iris-setosa']
virginica = iris.loc[iris['class'] == 'Iris-virginica']
versicolor = iris.loc[iris['class'] == 'Iris-versicolor']

sns.kdeplot(x=setosa.sepal_width, y=setosa.sepal_length, shade=True, alpha=0.7, color='blue', linewidth=2.5)
sns.kdeplot(x=virginica.sepal_width, y=virginica.sepal_length, shade=True, alpha=0.7, color='red', linewidth=2.5)
sns.kdeplot(x=versicolor.sepal_width, y=versicolor.sepal_length, shade=True, alpha=0.7, color='green', linewidth=2.5)


图9:鸢尾花数据集3种类别2个特征的二维KDE曲线


除此之外也有一些其他方法可以查看数据的分布,例如:箱线图、小提琴图、六边形分箱图等,本文不做过多介绍。


 相关性


  • 相关性系数


皮尔逊相关性系数(Pearson Correlation)是衡量向量相似度的一种方法。输出范围为-1到+1, 0代表无相关性,负值为负相关,正值为正相关。数值越接近1越相关。


iris.iloc[:, :4].corr()


图10:鸢尾花数据集4个特征的相关性系数


将皮尔逊相关性系数矩阵绘制成热力图可以清楚地看出变量之间的相关关系:花萼长度和宽度没有相关性,而花瓣长度和宽度的相关性很明显。


sns.heatmap(iris.iloc[:, :4].corr(), annot=True, cmap='YlGnBu')


图11:鸢尾花数据集4个特征的相关性系数热力图


  • 散点矩阵


可以用seaborn绘制出三种花的各个属性的散点矩阵。用于查看数据的相关性和概率密度分布。

import seaborn as sns
# 其他代码略过
sns.pairplot(iris, hue='class', diag_kind='kde')


图12:鸢尾花数据集4个特征的散点矩阵


分类算法入门:以鸢尾花数据集为例(下):https://developer.aliyun.com/article/1480493

目录
相关文章
|
27天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
85 4
|
3月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
36 0
|
2月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
2月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
2月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
2月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
4月前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
211 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
4月前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
|
5月前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。