小之的公衆號 : WeaponZhi。關注公衆號並回復AI獲取AI+Python資料和機器學習入門視頻教程python
咱們先要學習的機器學習算法是監督學習,那麼,何爲監督學習呢?要了解監督學習,咱們得先回顧下咱們平時的編碼方式。咱們平時的編碼方式是一種硬編碼,簡而言之就是面對問題的時候,咱們經過正向暴力編碼,將問題的各個方面和邏輯經過編碼來處理,從而使得代碼按照咱們的思路一步步運行下去,最終解決咱們的既定問題。算法
打個比方,假設咱們要寫一個代碼來區分一我的的性別,咱們可能首先會提取出男人和女人的特色,好比男人可能有鬍子,有喉結,身高廣泛在一個 xx 範圍這樣,那麼咱們就能夠根據這些屬性來編寫一些判斷條件,最終實現一個算法,而後把某我的具有的屬性輸入到算法,算法輸出一個結果,告訴你這我的多是啥性別。機器學習
這樣可能能實現一個算法,但會有兩個問題。首先就是這些屬性的肯定,決定一我的是什麼性別的屬性可能有不少,若是屬性太多,靠人工來編寫算法就會顯得很是不實際。其次,這些屬性對於最終輸出結果的影響是有限的,總會存在特例,有的男人就是不長鬍子,或者有的女人身高很高,面對這種比較特殊的個例的時候,算法就很是有可能出錯,顯然,單純的依靠硬編碼,是不可能作到盡善盡美的。函數
而監督學習算法的作法就是,把一些既定的樣本輸入給算法,這些樣本包括具體的特徵屬性和具體的輸出,好比「一我的身高一米八,有鬍子,有喉結」,這是它的樣本輸入,「這我的是個男人」是它的輸出,這些具備明確輸入和結果的樣本輸入到監督學習算法後,它會本身進行學習和總結,隨着樣本數量的增多,監督學習的判斷規則將會被訓練的 愈來愈準確和成熟。隨後,面對它從未見過的樣本,好比「一米六,沒鬍子,有喉結」,算法就會根據以前的規則給出一個它的判斷,告訴你這我的多是個啥性別。學習
咱們把鬍子、喉結這些屬性成爲特徵-Features,男人仍是女人這樣的輸出結果稱爲標籤-Label。爲了實現這樣的一個功能,咱們須要一個分類器,那麼,咱們整個監督學習的過程大概是這樣的。測試
scikit-learn 能夠幫咱們輕易的實現上面的需求,若是你安裝過 Anaconda,scikit-learn 就已經包含其中了,其餘下載方式這裏再也不贅述。ui
若是你是使用 Python 來學習機器學習,scikit-learn
確定是你必需要使用的機器學習庫,scikit-learn
是很是保守的庫,它專業性極強,只作機器學習領域,歷來不會做任何機器學習領域以外的擴展。不只如此,scikit-learn 使用的機器學習算法都是通過普遍驗證過的算法,這些算法每每也是效率最高,實現最簡單有效的。因此,閱讀 scikit-learn 的源碼實現也是一個很是好的學習方式。編碼
下面咱們用具體的代碼來演示上面說過的三個過程。3d
在現實的應用環境中,咱們獲取數據的方式是多種多樣的,好比,你能夠經過讀取已有文件來獲取數據,或者是動態的監聽數據,每獲取一條數據就輸入一條數據。咱們就不這麼複雜了,用上面判斷性別的例子,簡單的模擬幾個數據:
>> features = [[160,30,2.1],[170,15,2.3],[178,8,2.5],[188,10,2.8],[167,22,2.2]]
>> labels = [0,0,1,1,0]
複製代碼
features 是咱們的特徵,拿第一個數據 [160,30,2.1] 舉例子,160 表明的是身高,30 表明的是頭髮長度,2.1 表明的是腰圍,單位爲尺。好吧,原諒我想象力有點渣渣,可能例子很差,總之目前咱們使用身高、頭髮長度以及腰圍來做爲咱們判斷性別的特徵,固然,你還能夠提取出更多的特徵,這裏只是爲了咱們測試方便。labels 就是咱們的標籤了,0 表明這我的性別爲女,1 表明性別爲男
這樣, 咱們就算完成了第一步,收集好了真實數據
拿到了數據源,咱們須要挑選一種分類器來訓練這組數據,這裏咱們選擇決策樹,能夠先暫時不要管決策樹是什麼,你能夠把它當作實現分類器的一種形式罷了
>> from sklearn import tree
>> clf = tree.DecisionTreeClassifier()
>> clf.fit(features,labels)
複製代碼
sklearn
便是 scikit-learn 庫,咱們引入庫中的決策樹類,並使用fit()
函數來匹配特徵和標籤,這樣,咱們的分類器就算實現好了,clf
完成了它的訓練。
實際上你能夠把分類器想像成一個黑盒子,經過一些數據的訓練,這個盒子就具有了必定的判斷能力,當你再次輸入進數據的時候,它可以獲得相應的預測,至於這個盒子裏面到底使用了什麼方法根據數據的訓練來指定規則,就是你選取的算法所作的事了,好比在這裏,咱們選擇了決策樹來做爲分類器制定規則的算法,固然你還有不少算法能夠選擇,也能夠本身實現算法,這不在咱們這篇文章的講述範圍內。下面,咱們使用實現好的分類器,對一個未知數據進行預測
>> print(clf.predict([[180, 15, 2.3]]))
[0]
複製代碼
咱們使用predict()
函數來對一組分類器從未見過的數據來進行預測。分類器認爲一個 1 米 8 大個,長着 15 釐米長秀髮,腰圍 2.3 尺 的高大個是個女孩。好吧,這是它的想法。
那麼,這就是你的第一個機器學習代碼了,是否是簡單有趣無敵呢?
參考資料:Machine Learning Recipes with Josh Gordon
歡迎關注個人公衆號