实验二

班级 机器学习实验-计算机18级
实验内容 K-近邻算法及应用
姓名 郭晓
学号 3180701134

【实验目的】

1.理解K-近邻算法原理,能实现算法K近邻算法;

2.掌握常见的距离度量方法;

3.掌握K近邻树实现算法;

4.针对特定应用场景及数据,能应用K近邻解决实际问题。
【实验内容】

1.实现曼哈顿距离、欧氏距离、闵式距离算法,并测试算法正确性。

2.实现K近邻树算法;

3.针对iris数据集,应用sklearn的K近邻算法进行类别预测。

4.针对iris数据集,编制程序使用K近邻树进行类别预测。
【实验报告要求】

1.对照实验内容,撰写实验过程、算法及测试结果;

2.代码规范化:命名规则、注释;

3.分析核心算法的复杂度;

4.查阅文献,讨论K近邻的优缺点;

5.举例说明K近邻的应用场景。

实验代码:

import math
from itertools import combinations
def L(x,y,p=2):   #计算两点之间的长度函数(明氏距离公式,默认p=2时用欧拉距离公式)
    #x1=[1,1],x2=[5,1]
    if len(x)==len(y) and len(x)>1:
        sum=0
        for i in range(len(x)):
            sum+=math.pow(abs(x[i]-y[i]),p)
        return math.pow(sum,1/p)
    else:
        return 0
x1=[1,1]    #例子
x2=[5,1]
x3=[4,4]
#计算x1与x2、x3之间的距离
for i in range(1,5):
    r={'1-{}'.format(c):L(x1,c,p=i) for c in [x2,x3]}#计算p取不同值时对应的距离
    print(min(zip(r.values( ),r.keys( ))))

运行结果:
实验二

#python实现遍历所有数据点,找出n个距离最近的点的分类情况,少数服从多数
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from collections import Counter

iris = load_iris()  #导入数据
df = pd.DataFrame(iris.data, columns=iris.feature_names)#定义一个DataFrame变量
df['label'] = iris.target
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']#列名
# data = np.array(df.iloc[:100, [0, 1, -1]])

运行结果:
实验二

9、
实验二
10
实验二
11、
实验二
12、
实验二
13、
实验二
14、
实验二
15、
实验二
16、
实验二
17、
实验二
18、
实验二
19、
实验二
20、
实验二
21、
实验二
22、
实验二
23、
实验二
24、
实验二

讨论K*邻算法的优缺点

优点
1.简单易用
2.没有显式的训练过程,在训练过程中仅仅是把训练样本保存起来,训练时间开销为0,是懒惰学*(lazy learning) 的著名代表 。
3.预测效果好
4.对异常值不敏感
缺点
1、效率低
2、具有高度数据相关
3、预测结果不具有可解释性

K*邻算法常见的应用场景:

1、python中的文本自动分类
2、社交网站的数据分类
3、手写识别系统的数据分类

上一篇:4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)


下一篇:社区版本idea查看继承关系的骚操作