机器学习(二):数据分类I
任务如下
1.Sklearn中的make_circles方法生成训练样本,并随机生成测试样本,用KNN分类并可视化。
(1) make_circles与make_moons方法(可参考机器学习(一):低纬数据可视化)
(2) KNN算法
def KNeighborsClassifier(n_neighbors = 5,weights=‘uniform’,algorithm = ‘’,
leaf_size = ‘30’,p = 2,metric = ‘minkowski’,
metric_params = None, n_jobs = None)
其中:
n_neighbors:这个值就是指 KNN 中的 “K”了。前面说到过,通过调整 K 值,算法会有不同的效果。
weights(权重):最普遍的 KNN 算法无论距离如何,权重都一样,但有时候我们想搞点特殊化,比如距离更近的点让它更加重要。这时候就需要 weight 这个参数了,这个参数有三个可选参数的值,决定了如何分配权重。参数选项如下:
- ‘uniform’:不管远近权重都一样,就是最普通的 KNN 算法的形式。
- ‘distance’:权重和距离成反比,距离预测目标越近具有越高的权重。
- 自定义函数:自定义一个函数,根据输入的坐标值返回对应的权重,达到自定义权重的目的。
完整代码
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt
import numpy as np
import random
def KNN(inX,x,y,k):
d = x - inX
dist = (d**2).sum(axis=1)**0.5 # 计算欧几里得距离
distance = dist.argsort() # 小到大排序
result = np.argmax(np<