機器學習實戰彙總

具體代碼可以看github:代碼github

Ch2:k - 近鄰算法

一,k近鄰算法的工作原理:

     存在一個樣本數據集,也稱作訓練數據集,並且樣本集中每個數據都存在標籤,即我們知道樣本集中每個數據與所屬分類的對應關係。當輸入沒有標籤的新數據後,將新數據的每個特徵與樣本集中數據對應的特徵進行比較,然後算法提取樣本集中特徵最相似的數據的分類標籤。一般來說,我們只選擇樣本數據集中最相似的k個數據(通常k不大於20),再根據多數表決原則,選擇k個最相似數據中出現次數最多的分類,作爲新數據的分類。

     k近鄰算法的一般流程:
(1)收集數據:可以採用公開的數據源

(2)準備數據:計算距離所需要的數值

(3)分析數據:剔除垃圾信息

(4)測試算法:計算錯誤率

(5)使用算法:運用在實際中,對實際情況進行預測

二、實戰

k近鄰算法對未知類別屬性的數據集中每個點依次執行如下步驟:
1)計算已知類別數據集中的點與當前點之間的距離

2)按照距離遞增次序排序

3)選取與當前點距離最小的k個點

4)確定前k個點所在類別的出現頻率

5)返回前k個點出現頻率最高的類別作爲當前點的預測分類

'''
使用 kNN 進行分類(約會網站配對)

@param inX:用於分類的數據向量
@param dataSet:訓練樣本集
@param labels:標籤向量
@param k:用於選擇最近鄰的數目
'''
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    # 求inX與數據集中各個樣本的歐氏距離
    diffMat = tile(inX, (dataSetSize,1)) - dataSet   # np.tile 複製inX  4*1
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)  # 按照x軸相加
    distances = sqDistances**0.5  
    sortedDistIndicies = distances.argsort()   # 從小到大排序後,返回索引
    # 字典,key存儲第i小的標籤值,value爲標籤的次數
    classCount = {}          
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]  # 取第i個小的標籤值
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1  # 根據標籤統計標籤次數,如果沒找到返回0。統計前k個候選者中標籤出現的次數
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # operator.itemgetter(1) 按照第2個元素,即標籤出現的次數對classCount從大到小排序
    # print(sortedClassCount)  # 測試結果 [('B', 2), ('A', 1)]
    return sortedClassCount[0][0]  # 返回最終的類別,即標籤值key

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels


# 測試kNN
group, labels = createDataSet()
ans = classify0([0,0], group, labels, 3)
print(ans)

Ch3:決策樹

檢測數據集中的每一個子項是否屬於同一分類:

僞代碼:

if so return 類標籤;
else
      尋找劃分數據集的最好特徵
      劃分數據集
      創建分支結點
            for 每個分支結點
                 調用函數createBranch並增加返回結點到分支結點中//遞歸調用createBranch()
      return 分支結點

我們可以總結出決策樹的一般流程:

(1)收集數據

(2)準備數據:構造樹算法只適用於標稱型數據,因此數值型數據必須離散化

(3)分析數據

(4)訓練數據:上述的構造樹過程構造決策樹的數據結構

(5)測試算法:使用經驗樹計算錯誤率

(6)使用算法:在實際中更好地理解數據內在含義

Ch4:基於概率論的分類方法:樸素貝葉斯

Ch5:Logistic 迴歸

梯度下降法更新權重:

Ch6:支持向量機

SMO算法

#SMO算法的僞代碼
#創建一個alpha向量並將其初始化爲0向量
#當迭代次數小於最大迭代次數時(w外循環)
    #對數據集中每個數據向量(內循環):
    #如果該數據向量可以被優化:
        #隨機選擇另外一個數據向量
        #同時優化這兩個向量
        #如果兩個向量都不能被優化,退出內循環
#如果所有向量都沒有被優化,增加迭代次數,繼續下一次循環

Ch7:利用 AdaBoost 元算法提高分類性能

Boosting 中最流行的的一個算法是 AdaBoost,以弱學習器作爲基分類器,並且輸入數據,使其通過權重向量進行加權。在第一次迭代中,所有數據等權重,在後續迭代中,前次迭代中分錯的數據的權值增大,這種針對錯誤的調節能力正是 AdaBoost 的長處。

Ch8:預測數值型數據:迴歸

 

 

 

 

 

 

 

參考:

實戰代碼彙總

實戰代碼+理論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章