from numpy import *
import operator
def createdataset() -> object:
group = array([[1.0,1.0], [1.0,1.1], [0,0], [0,0.1]])
labels = ['a','a','b','b']
return group, labels;
def classify0(inx, dataset, labels, k):
datasetsize = dataset.shape[0]##得到樣本的數量
diffmat = tile(inx, (datasetsize, 1)) - dataset##將要分類的向量擴充,然後每個做減法
sqdiffmat = diffmat**2##每個距離平方
sqdistances = sqdiffmat.sum(axis = 1)##這裡我以為sqdiffmat本身就是多行一列的,現在不知道為什麼還要加一下,sum函式在這裡將每一行加了起來,應該是和加之前一樣的吧,有了解的大神可以指點一下
distances = sqdistances**0.5##開方
sorteddistindicies = distances.argsort()##從小到大排序
classcount = {}##新建乙個字典
for i in range(k):##迴圈
voteilabel = labels[sorteddistindicies[i]]##距離從小到大,分別標籤存進voteilabel
classcount[voteilabel] = classcount.get(voteilabel, 0) + 1##get函式拿到voteilabel的數目,加1,賦給classcount中對應voteilabel
sortedclasscount = sorted(classcount.iteritems(), key = operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
先放上書上的**,然後分析學習:
1,shape函式的用法,引入numpy即可使用,用於返回陣列或者矩陣的維數,如a是3x2的矩陣,a.shape的結果是(3,2),其中可以理解為是返回了行和列,也可以理解為返回第一維的長度和第二維的長度,shape[0]返回的便是第一維的長度。
在機器學習實戰中,dataset.shape[0]得到的便是資料樣本的長度
2,tile函式的用法:tile(a,a),實現對a的擴充
3,sum函式的用法:sum(axis=1)是將乙個矩陣的每一行向量相加
sum(axis=0)是將乙個矩陣的每一列向量相加
4,最後兩行的意義: sorted函式的意義是按照key的要求將classcount排序,得到的輸出選擇[0][0],則是對應出現次數最高的分類
機器學習實戰筆記 1 機器學習基礎
監督學習的兩個任務 分類和回歸分析 數值型資料 分類方法思路 這個表至關重要,叫做特徵向量表 特徵1特徵2 目的變數 類別 例項1 例項2 如上表,分類思路如下 用大量的已分類資料 其目標變數的值已給出 組成的訓練集進行訓練,該訓練集由若干個訓練樣本構成,每個訓練樣本是乙個例項 測試樣本 不提供目標...
機器學習實戰學習筆記 1 基礎
1,什麼是機器學習 機器學習,簡單說就是要把無序的資料,轉化為人們可以識別的有用的資料。2,機器學習需要哪些基礎知識 機器學習橫跨很多學科領域,包括但不限於 計算機,數理統計,工程技術等。3,什麼時候可以用機器學習 一般我們寫 解決問題,結果或者計算過程具有確定性。比如計算完全數,水仙花數,或者保險...
機器學習(1) 完整的機器學習演算法實戰流程
作為機器學習的初學者,最關心的肯定是如何搭建執行環境 如何完整跑乙個機器學習演算法的例項程式了。本人剛趟過坑,就把這個過程整理下來,作為後面進來的人的乙份參考,以此互勉。一 執行時環境ipython notebook 網頁版的notebook相比整合環境pycharm有許多優點,如分段執行程式,而且...