Java教程

实验二

本文主要是介绍实验二,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
班级机器学习实验-计算机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、手写识别系统的数据分类

这篇关于实验二的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!