实验结果直接戳这里免费下载实验报告
(决策树算法的实验还没做 做了之后再上传吧 最近有点忙555)
文章目录
1.KNN算法
即最邻近结点算法 / K均值聚类算法
1.1 KNN算法原理:
KNN属于lazy learning —— 不会对训练样本数据进行学习
对一个新数据 计算它与训练集中数据的距离 选择最短的k个作为邻居 然后预测新数据的类别和k个邻居中一致性最多的所属类别。
1.2 KNN算法的优点
- 经典算法,简单、快速。
- 对处理大数据集,该算法是相对可伸缩和高效率的。
有新数据不用重新聚类了~所以是相对可伸缩的
1.3 KNN算法的缺点
- 必须事先给出k
- 对初始值敏感
不同初始值可能导致不同的结果
- 对于噪声数据和孤立点数据是敏感的
- 要求训练样本正确体现数据的真实分布
由于KNN的预测效果是强依赖于训练数据的,所以KNN不会对训练数据进行深入学习,只是单纯地考虑数据之间的距离。
所以一旦训练样本不能正确体现数据真实分布,预测就会不准确!
另外,训练数据如果不属于同一分布,也会导致预测不准确。
1.4 KNN的做法(目的):
预测新数据的类别和k个邻居中一致性最多的所属类别。
1.5 编程实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
class KNearestNeighbor(object):
def __init__(self):
pass
def loadData(self, path):
data = pd.read_csv(path, header=None)
data.columns = ['sepal length', 'sepal width',
'petal length', 'petal width',
'species'] # 特征及类别名称
X = data.iloc[0:150, 0:4].values
y = data.iloc[0:150, 4].values
# Iris-setosa 输出label用0表示
y[y == 'Iris-setosa'] = 0
# Iris-versicolor 输出label用1表示
y[y == 'Iris-versicolor'] = 1
# Iris-virginica 输出label用2表示
y[y == 'Iris-virginica'] = 2
# Iris - setosa 4个特征
self.X_setosa, self.y_setosa = X[0:50], y[0:50]
# Iris-versicolor 4个特征
self.X_versicolor, self.y_versicolor = X[50:100], y[50:100]
# Iris-virginica 4个特征
self.X_virginica, self.y_virginica = X[100:150], y[100:150]
# 训练集
self.X_setosa_train = self.X_setosa[:30, :]
self.y_setosa_train = self.y_setosa[:30]
self.X_versicolor_train = self.X_versicolor[:30, :]
self.y_versicolor_train = self.y_versicolor[:30]
self.X_virginica_train = self.X_virginica[:30, :]
self.y_virginica_train = self.y_virginica[:30]
self.X_train = np.vstack([self.X_setosa_train, self.X_versicolor_train, self.X_virginica_train])
self.y_train = np.hstack([self.y_setosa_train, self.y_versicolor_train, self.y_virginica_train])
# 测试集
self.X_setosa_test = self.X_setosa