分类算法中决策树和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()

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

相关文章
|
23天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
72 4
|
2月前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
27 1
|
3月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
67 2
|
3月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
68 4
|
4月前
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
328 1
|
14天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
20天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
8天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
16天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
8天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。