分类算法中决策树和KNN算法讲解及对iris数据集分类实战(附源码)

简介: 分类算法中决策树和KNN算法讲解及对iris数据集分类实战(附源码)

需要源码请带点赞关注收藏后评论区留言私信~~~

分类是一种重要的数据分析形式,它提取刻画重要数据类的模型。数据分类也被称为监督学习,包括学习阶段(构建分类模型)和分类阶段(使用模型预测给定数据的类标号)两个阶段。数据分类方法只要有决策树归纳、贝叶斯分类、K-近邻分类、支持向量机SVM等方法

一、决策树规约

1. 算法原理

决策树方法在分类、预测、规则提取等领域有广泛应用。在20世纪70年代后期和80年代初期,机器学习研究人员J.Ross Quinlan开发了决策树算法,称为迭代的二分器(Iterative Dichotomiser,ID3),使得决策树在机器学习领域得到极大发展。Quinlan后来又提出ID3的后继C4.5算法,成为新的监督学习算法的性能比较基准。1984年几位统计学家提出CART分类算法

决策树是树状结构,它的每个叶结点对应着一个分类,非叶结点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分为若干子集。构造决策树的核心问题是在每一步如何选择恰当的属性对样本做拆分。ID3使用信息增益作为属性选择度量,C4.5使用增益率进行属性选择度量,CART使用基尼指数

2. ID3算法

利用决策树算法对Iris数据构建决策树

结果如下图

代码如下

 

from sklearn.datasets import load_iris
import pandas as pd
from sklearn import tree
from sklearn.tree import export_graphviz
import graphviz  #提前安装
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
dot_file = 'tree.dot'
tree.export_graphviz(clf, out_file = dot_file)
with open("result\\tree.dot", 'w') as f:
    f=export_graphviz(clf, out_file = f,feature_names = ['SL','SW','PL','PW'])
from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.model_selection import train_test_split
iris = load_iris()
X_train,X_test,y_train,y_test=train_test_split(iris.data, iris.target,test_size=0.20,random_state=20)
clf = tree.DecisionTreeClassifier( )
# criterion缺省为'gini'
clf = cltree(clf,feature_names=iris.feature_names, class_names=iris.target_names)
# feature_names=iris.feature_names设置决策树中显示的特征名称
# 预测数据[6,5,5,2]的类别
print('数据[6,5,5,2]的类别:',clf.predict([[6,5,5,2]]))
print('测试集的标签:\n',y_test)
print('模型准确率为:',"{0:.3f}".format(clf.score(X_test,y_test)))

二、KNN算法

KNN 是一个理论上比较成熟的方法,也是最简单的机器学习算法之一

算法最初由Cover和Hart于1968年提出,它根据距离函数计算待分类样本 X 和每个训练样本的距离(作为相似度),选择与待分类样本距离最小的K个样本作为X的K个最近邻,最后以X的K个最近邻中的大多数样本所属的类别作为X的类别

1. 算法原理

如图所示,有方块和三角形两类数据,它们分布在二维特征空间中。假设有一个新数据(圆点)需要预测其所属的类别,根据“物以类聚”,可以找到离圆点最近的几个点,以它们中的大多数点的类别决定新数据所属的类别。如果k = 3,由于圆点近邻的3个样本中,三角形占比2/3,则认为新数据属于三角形类别。同理,k = 5,则新数据属于正方形类别

如何度量样本之间的距离(或相似度)是KNN算法的关键步骤之一。常见的相似度度量方法包括闵可夫斯基距离(当参数p = 2时为欧几里得距离,参数p = 1时为曼哈顿距离)、余弦相似度、皮尔逊相似系数、汉明距离、杰卡德相似系数等

(1)    汉明距离

两个等长字符串s1和s2之间的汉明距离(Hamming distance)定义为将其中一个变为另外一个所需要做的最小替换次数。例如:1011101与1001001之间的汉明距离是2,2143896与2233796之间的汉明距离是3,”toned”与”roses”之间的汉明距离是3

(2)    杰卡德相似系数

在上面的例子中,用M11表示两个用户都看过的电影数目,M10表示用户A看过而用户B没有看过的电影数目,M01表示用户A没看过而用户B看过的电影数目,M00表示两个用户都没有看过的电影数目。Jaccard相似性系数可以表示为

KNN算法大致包括三个步骤:

1. 算距离:给定测试对象,计算它与训练集中的每个对象的距离;

2. 找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻;

3. 做分类:根据这k个近邻归属的主要类别,来对测试对象分类

2. KNN算法

输入:簇的数目k和包含n个对象的数据库。 输出:k个簇,使平方误差最小。

方法: (1)初始化距离为最大值;

(2)计算测试样本和每个训练样本的距离dist;

(3)得到目前 K个最近邻样本中的最大距离maxdist;

(4)如果dist小于maxdist,则将该训练样本作为K最近邻样本;

(5)重复步骤2-4,直到测试样本和所有训练样本的距离都计算完毕;

(6)统计K个最近邻样本中每个类别出现的次数;

(7)选择出现频率最大的类别作为测试样本的类别

利用KNN对iris数据集分类

部分代码如下

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:,:2]
Y = iris.target
print(iris.feature_names)
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])
clf = KNeighborsClassifier(n_neighbors = 10,weights = 'uniform')
clf.fit(X,Y)
#画出决策边界
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max =y,Z,cmap = cmap_light)
#绘制预测结果图
plt.scatter(X[:,0],X[:,1],c = Y,cmap = cmap_bold)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title('3_Class(k = 10,weights = uniform)')
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
7月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
664 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
7月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
8月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
8月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
7月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
7月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
718 0
|
7月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
447 2
|
8月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
368 3
|
7月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
345 8
|
7月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
397 8