美文网首页
机器学习KNN

机器学习KNN

作者: 时尚灬IT男 | 来源:发表于2021-10-20 14:01 被阅读0次

代码带注释

一般在机器学习模型中会涉及到衡量两个样本间的距离,如聚类、KNN,K-means等,使用的距离为欧式距离。其实,除了欧氏距离之外,还有很多的距离计算标准, 这里介绍欧氏距离。

欧式距离

最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x = ( x 1 , … , x n ) x = (x_1,…,x_n)x=(x1,…,xn) 和 y = ( y 1 , … , y n ) y = (y_1,…,y_n)y=(y1 ,…,yn) 之间的距离为:

image.png

1.二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:


image.png

2.两个n维向量a(x11, x12 , … , x1n)与b(x21,x22,…,x2n )间的欧氏距离:


image.png
# coding= utf8

import numpy as np
from numpy import *
import matplotlib.pyplot as plt
import math
import operator

#创建数据源1
def creat_dataset():
    datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])#数据集
    labels = ['非常热','非常热','一般热','一般热']#类标签
    return datasets,labels

#创建数据源2
def creat_dataset2():
    datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5],[9,4,2],[7,0,1],[1,5,4],[4,0,5]])#数据集
    labels = ['非常热','非常热','一般热','一般热','非常热','非常热','一般热','一般热']#类标签
    return datasets,labels

def analyze_data_plot(x,y):
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(x,y)
    plt.show()

#构造KNN分类器
def knn_Classifier(newV,datasets,labels,k):
    #1.计算样本数据与样本库函数之间的距离
    sqrtDist = Euclideandistance3(newV,datasets)
    #2.根据距离进行排序
    sortdDistindexs = sqrtDist.argsort(axis=0)
    # print(sortdDistindexs)
    #3.针对k个点,统计各个类别的数量
    classCount = {}
    for i in range(k):
        #根据距离排序索引值找到类标签
        votelabel = labels[sortdDistindexs[i]]
        # print(sortdDistindexs[i],votelabel)
        #统计类标签的键值对
        classCount[votelabel] = classCount.get(votelabel,0)+1
        # print(classCount)
    #4.投票机制,少数服从多数原则
    #对各个分类字典进行排序,降序,按照值排序
    sortedclassCount = sorted(classCount.items(),key=operator.itemgetter(0))
    # print(sortedclassCount)
    #print(newV,'KNN投票预测结果是:',sortedclassCount[0][0])
    return sortedclassCount[0][0]

#欧式距离计算3
def Euclideandistance3(newV,datasets):
    #获取数据向量维度值
    rowsize,closize = datasets.shape
    #各特征向量求差值
    diffMat = tile(newV, [rowsize, 1]) - datasets
    # print(tile(newV,[rowsize,1]))
    # print(diffMat)
    #对插值平方
    sqdiffMat = diffMat**2
    # print(sqdiffMat)
    #差值平方和进行开方
    sqrtDist = sqdiffMat.sum(axis=1)**0.5
    return sqrtDist

def predict_temperature():
    datasets, labels = creat_dataset()
    iceCream = eval(input('请问你今天吃了几个冰淇淋?\n'))
    drinkWater = eval(input('请问你今天喝了几杯水?\n'))
    playTime = eval(input('请问你今天户外活动几小时?\n'))
    newV = [iceCream,drinkWater,drinkWater]
    res = knn_Classifier(newV, datasets, labels, 3)
    print('该访客认为成都天气是:', res)

if __name__ == '__main__':

    # 4.1 单实例构造KNN分类器
    # newV = [2,4,4]
    # res = knn_Classifier(newV, datasets, labels, 3)
    # print(newV, 'KNN投票预测结果是:', res)

    #4.2 多实例构造KNN分类器
    # vecs = array([[2,4,4],[3,0,0],[5,7,2]])
    # for vec in vecs:
    #     res = knn_Classifier(vec,datasets,labels,3)
    #     print(vec, 'KNN投票预测结果是:', res)

    # 5 利用KNN分类器预测随机访客天气感知度
    predict_temperature()

相关文章

  • 机器学习实战-knn

    机器学习实战笔记-knn算法实战 本文内容源于《机器学习实战》一书,主要介绍了knn(k-nearest neig...

  • 第六节分类算法

    1knn算法 1.1knn的过程 1.2scilit-learn中的knn 1.3scikit-learn机器学习...

  • 01 KNN算法 - 概述

    KNN算法全称是K近邻算法 (K-nearst neighbors,KNN) KNN是一种基本的机器学习算法,所谓...

  • KNN算法以及欧式距离

    1.KNN算法介绍 KNN 是什么? KNN(K-Nearest Neighbor)是最简单的机器学习算法之一,可...

  • 机器学习-KNN

    sklearn中的train_test_split 4.4分类准确度accuracy 不需要求出预测值 只要求预测...

  • 机器学习-knn

    生成已标记的数据集并直观显示 训练 预测 把带预测的样本以及和其最近的5个点标记出来

  • 机器学习: KNN

    KNN (K Nearest Neighbor) 是比较常见的种监督算法。它的主要思想是看这个数据距离最近的 K ...

  • 机器学习KNN

    代码带注释 一般在机器学习模型中会涉及到衡量两个样本间的距离,如聚类、KNN,K-means等,使用的距离为欧式距...

  • kNN算法

    一. kNN算法 kNN(k-NearestNeighbor),即k最近邻算法,是机器学习算法中最基础的入门算法。...

  • 2020-08-10--KNN01

    KNN算法的原理介绍KNN算法的一个简单实现(肿瘤分类)将KNN算法封装成函数机器学习套路使用scikit-lea...

网友评论

      本文标题:机器学习KNN

      本文链接:https://www.haomeiwen.com/subject/oxytaltx.html