总体来说讲呢,机器学习又两种学习方法,一个叫有监督学习(Supervised),一种叫无监督学习(Unsupervised)。顾名思义啊,一个就是有人看着,一个就是没有。在机器学习中呢,就是有监督学习,会先告诉学习算法,我有200本书,这些是我喜欢的,那些是我觉得一般的,那些是我讨厌的。好,现在又给你一本书,请你告诉我,我对这本书的态度。
这样的学习过程就是有监督的。
无监督的就是直接给你200本书,告诉你,给我分成几类吧。分好后,你在给他一本书,问他,这本书和哪些是同一类?
大致就是这样的意思。
今天,我们就来看一个很简单的监督学习算法,KNN(k-Nearest Neighbor)。基本步骤就是这样:
1.把书分成n类,告诉算法每一本书分别属于哪一类
2.给算法一本新书
3.算法计算这本书和之前200本书的距离
4.取k个与这本书距离最近的已知类别的书。k本书中,哪种类别的书最多,那么算法就认为这本新书属于哪种类别。换句话说,这些已知类别的书在投票。
可见,这本书与200本书的距离计算是一个很重要的点。投票的方法也是很重要的点。上诉只是讲了最简单的投票方法而已,可以按照不同的方法计算权重。KNN更加纤细的一些概要可以看我转载的这一文章: http://blog.csdn.net/qtlyx/article/details/50618659
设置好参数,就是训练,有监督的放样本和标签,无监督的,只有样本。通常设置语句是这样的:
设置完成可用的机器学习方法.fit(训练样本,[标签])
3.预测。
训练完之后就可以用这个东西来预测新的输入的类别了。通常设置语句是这样的:
设置完成可用的机器学习方法.predict(新样本)
数据是这样的:
这是数据集的内容,共150条,这里只截取了部分
这是对应的150个类别。
2.提取训练数据集和测试数据集
i = 0
list = []
for i in range(0,150):
if i%3 != 0 :
list.append(i)
上面的代码产生了一个0到149,不能被三整除的数,就是说,我们从150个数据中选出三分之一。、
samples= iris.data[list]
lab = iris.target[list]
如此就提取出来了。
3.设置
n_neighbors = 15
clf = neighbors.KNeighborsClassifier(n_neighbors, weights='uniform')
如此,设置了算法的参数,k取15,投票权重为最简单的,大家权重都一样。
4.训练
clf.fit(samples,lab)
5测试
clf.predict(iris.data[3])
clf.predict(iris.data[6])
clf.predict(iris.data[147])
五.完整代码
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 01 16:27:13 2016
@author: Luyixiao
"""
# -*- coding: utf-8 -*-
import numpy as np
from sklearn import neighbors, datasets
n_neighbors = 15
iris = datasets.load_iris()
i = 0
list = []
for i in range(0,150):
if i%3 != 0 :
list.append(i)
samples= iris.data[list]
lab = iris.target[list]
n_neighbors = 15
clf = neighbors.KNeighborsClassifier(n_neighbors, weights='uniform')