一、有監督與無監督學習
總體來說講呢,機器學習又兩種學習方法,一個叫有監督學習(Supervised),一種叫無監督學習(Unsupervised)。顧名思義啊,一個就是有人看着,一個就是沒有。在機器學習中呢,就是有監督學習,會先告訴學習算法,我有200本書,這些是我喜歡的,那些是我覺得一般的,那些是我讨厭的。好,現在又給你一本書,請你告訴我,我對這本書的态度。
這樣的學習過程就是有監督的。
無監督的就是直接給你200本書,告訴你,給我分成幾類吧。分好後,你在給他一本書,問他,這本書和哪些是同一類?
大緻就是這樣的意思。
二、KNN
今天,我們就來看一個很簡單的監督學習算法,KNN(k-Nearest Neighbor)。基本步驟就是這樣:
1.把書分成n類,告訴算法每一本書分别屬于哪一類
2.給算法一本新書
3.算法計算這本書和之前200本書的距離
4.取k個與這本書距離最近的已知類别的書。k本書中,哪種類别的書最多,那麼算法就認為這本新書屬于哪種類别。換句話說,這些已知類别的書在投票。
可見,這本書與200本書的距離計算是一個很重要的點。投票的方法也是很重要的點。上訴隻是講了最簡單的投票方法而已,可以按照不同的方法計算權重。KNN更加纖細的一些概要可以看我轉載的這一文章: http://blog.csdn.net/qtlyx/article/details/50618659
三、sklearn機器學習方法函數概要
咱們大概了解這一算法之後呢,看一下sklearn的函數。
從剛才的講述中可以看出,算法的輸入是樣本(samples),就是我們說的兩百本書;以及這些書對應的标簽(labels)。把這兩個告訴算法之後,就是學習完成了。
sklearn裡面的機器學習方法函數有如下基本方法
1.設定。
這就是設定一個方法的參數,比如KNN算法,就可以設定距離計算的方法,歐式距離啊、明科夫斯基距離之類的;還有k的取值,我們要最鄰近的10個樣本還是15個;還有投票權重的計算;等等等等。
一般設定語句是這樣的:
設定完成可用的機器學習方法 = 機器學習方法名(參數1,參數2,參數3.。。。。。。)。
2.訓練
設定好參數,就是訓練,有監督的放樣本和标簽,無監督的,隻有樣本。通常設定語句是這樣的:
設定完成可用的機器學習方法.fit(訓練樣本,[标簽])
3.預測。
訓練完之後就可以用這個東西來預測新的輸入的類别了。通常設定語句是這樣的:
設定完成可用的機器學習方法.predict(新樣本)
四、sklearn的KNN算法示例
1.資料
我們使用鸢尾花資料集,這是sklearn自帶的資料集,也是資料挖掘領域裡面相當有名的資料集。每一條記錄都是一類鸢尾花,記錄的内容是鸢尾花的屬性,比如多高啊,花的直徑啊這類。
資料是這樣的:
這是資料集的内容,共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])
複制
将這資料和iris.target對應下表比較發現時一樣的。
如:
五.完整代碼
# -*- 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')
複制