k近邻、决策树、朴素贝叶斯实现鸢尾花数据集分类
时间: 2025-01-18 14:06:00 浏览: 31
好的,以下是使用k近邻(k-NN)、决策树和朴素贝叶斯算法对鸢尾花(Iris)数据集进行分类的详细介绍:
1. k近邻(k-NN)
k近邻算法是一种基于实例的学习方法,主要用于分类和回归。k-NN的基本思想是通过测量不同特征值之间的距离来进行分类。
步骤:
- 计算待分类数据点与所有训练数据点之间的距离。
- 选择距离最近的k个邻居。
- 根据这k个邻居的类别进行投票,票数最多的类别即为待分类数据点的类别。
优点:
- 简单易懂,易于实现。
- 无需训练过程,适合在线学习。
缺点:
- 计算复杂度高,尤其是在数据量大的时候。
- 对噪声和异常值敏感。
2. 决策树
决策树是一种树形结构,其中每个内部节点表示一个特征或属性,每个分支代表一个决策规则,每个叶节点代表一个结果。
步骤:
- 选择最佳特征进行分裂,通常使用信息增益或基尼指数。
- 根据特征的不同取值进行分裂,生成子节点。
- 递归地对子节点进行分裂,直到满足停止条件。
优点:
- 易于理解和解释。
- 不需要特征缩放。
缺点:
- 容易过拟合,需要剪枝。
- 对噪声和异常值敏感。
3. 朴素贝叶斯
朴素贝叶斯是一种基于贝叶斯定理的分类算法,假设特征之间相互独立。
步骤:
- 计算每个类别的先验概率。
- 计算每个特征在每个类别下的条件概率。
- 根据贝叶斯定理计算每个类别的后验概率。
- 选择后验概率最大的类别作为分类结果。
优点:
- 简单高效,适合大规模数据。
- 对小规模数据集表现良好。
缺点:
- 特征独立性假设在实际应用中往往不成立。
- 对数据的分布要求较高。
实现示例(使用Python和scikit-learn)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# k近邻
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
knn_pred = knn.predict(X_test)
print("k-NN Accuracy:", accuracy_score(y_test, knn_pred))
# 决策树
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
dt_pred = dt.predict(X_test)
print("Decision Tree Accuracy:", accuracy_score(y_test, dt_pred))
# 朴素贝叶斯
nb = GaussianNB()
nb.fit(X_train, y_train)
nb_pred = nb.predict(X_test)
print("Naive Bayes Accuracy:", accuracy_score(y_test, nb_pred))
相关推荐



















