实现KNN算法&搭建人工神经网络ANN——第三次数据挖掘实验

本次实验详细介绍了KNN算法的原理、优缺点及实现,强调了KNN对训练数据的依赖性。同时,探讨了搭建人工神经网络的基础知识,包括感知机和BP算法的应用。提供了实验代码供学习与参考。
摘要由CSDN通过智能技术生成

实验结果直接戳这里免费下载实验报告
(决策树算法的实验还没做 做了之后再上传吧 最近有点忙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
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值