实验二
Posted 萌萌哒的恩基爱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二相关的知识,希望对你有一定的参考价值。
班级 | 机器学习实验-计算机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、手写识别系统的数据分类
以上是关于实验二的主要内容,如果未能解决你的问题,请参考以下文章