KNN算法(K近邻分类法)
KNN算法可以直接调用python的sklearn包中的knn算法
python自带的sklearn包是一个非常强大的机器学习包,其中包含了knn算法,主要包含以下几个函数。(下面是用鸢尾花数据集做预测)
from sklearn.neighbors import KNeighborsClassifier
//引入sklearn包中的knn类
knn=KNeighborsClassifier(weights="distance",n_neighbors=10)
//取得knn分类器,并使用内置参数调整KNN三要素
knn.fit(iris_x_train,iris_y_train)
//使用knn.fit()对训练集进行训练
iris_y_predict=knn.predict(iris_x_test)
//调用knn.predict()预测新输入的类别
knn.predict_proba(iris_x_test)
//调用knn.predict_proba(),显示每个测试集样本对应各个分类结果的概率
score=knn.score(iris_x_test,iris_y_test,sample_weight=None)
//调用knn.score()计算预测的准确率
knn.fit(),训练函数,它是最主要的函数。接收参数只有1个,就是训练数据集,每一行是一个样本,每一列是一个属性。它返回对象本身,即只是修改对象内部属性,因此直接调用就可以了,后面用该对象的预测函数取预测自然及用到了这个训练的结果。
下面是自实现随机生成数据(两种:高斯以及环形数据),KNN进行分类。
# -*- coding: utf-8 -*-
from numpy.random import randn
import pickle
from pylab import *
# create sample data of 2D points
n = 500
# two normal distributions
class_1 = 0.4 * randn(n,2)
class_2 = 1.2 * randn(n,2) + array([5,1])
labels = hstack((ones(n),-ones(n)))
# save with Pickle
#with open('points_normal.pkl', 'wb') as f:
with open('points_normal_test.pkl', 'wb') as f:
pickle.dump(class_1,f)
pickle.dump(class_2,f)
pickle.dump(labels,f)
# normal distribution and ring around it
print ("save OK!")
class_1 = 0.4 * randn(n,2)
r = 0.9 * randn(n,1) + 5
angle = 2*pi * randn(n,1)
class_2 = hstack((r*cos(angle),r*sin(angle)))
labels = hstack((ones(n),-ones(n)))
# save with Pickle
#with open('points_ring.pkl', '