機器學習分類
目前,機器學習的方法主要有三種:監督學習、半監督學習和無監督學習。監督學習是利用一組已知類別的樣本調整分類器的參數,使其達到所要求性能的過程。白話一點,就是根據已知的,推斷未知的。代表方法有:Nave Bayes、SVM、決策樹、KNN、神經網絡以及Logistic分析等;
半監督方法主要考慮如何利用少量的標註樣本和大量的未標註樣本進行訓練和分類的問題,也就是根據少量已知的和大量未知的內容進行分類。代表方法有:最大期望、生成模型和圖算法等。
無監督學習是利用一組已知類別的樣本調整分類器的參數,使其達到所要求性能的過程。也就是及其自個兒學。代表方法有:Apriori、FP樹、K-means以及目前比較火的DeepLearning。
從這三方面看,無監督學習是最智能的,有能實現機器主動意識的潛質,但發展還比較緩慢;監督學習是不太靠譜的,從已知的推斷未知的,就必須要把事物所有可能性全都學到,這在現實中是不可能的,人也做不到;半監督學習是“沒辦法中的辦法”,既然無監督學習很難,監督學習不靠譜,就取個折中,各取所長。目前的發展是,監督學習技術已然成熟,無監督學習還在起步,所以對監督學習方法進行修改實現半監督學習是目前的主流。但這些方法基本只能提取信息,還不能進行有效的預測(人們就想,既然沒法得到更多,就先看看手裏有什麽,於是數據挖掘出現了)。
機器學習方法非常多,也很成熟。下面我挑幾個說。首先是SVM。因為我做的文本處理比較多,所以比較熟悉SVM。SVM也叫支持向量機,其把數據映射到多維空間中以點的形式存在,然後找到能夠分類的最優超平面,最後根據這個平面來分類。SVM能對訓練集之外的數據做很好的預測、泛化錯誤率低、計算開銷小、結果易解釋,但其對參數調節和核函數的參數過於敏感。個人感覺SVM是二分類的最好的方法,但也僅限於二分類。如果要使用SVM進行多分類,也是在向量空間中實現多次二分類。SVM有一個核心函數SMO,也就是序列最小最優化算法。SMO基本是最快的二次規劃優化算法,其核心就是找到最優參數α,計算超平面後進行分類。SMO方法可以將大優化問題分解為多個小優化問題求解,大大簡化求解過程。SVM還有一個重要函數是核函數。核函數的主要作用是將數據從低位空間映射到高維空間。詳細的內容我就不說了,因為內容實在太多了。總之,核函數可以很好的解決數據的非線性問題,而無需考慮映射過程。
第二個是KNN。KNN將測試集的數據特征與訓練集的數據進行特征比較,然後算法提取樣本集中特征最近鄰數據的分類標簽,即KNN算法采用測量不同特征值之間的距離的方法進行分類。KNN的思路很簡單,就是計算測試數據與類別中心的距離。KNN具有精度高、對異常值不敏感、無數據輸入假定、簡單有效的特點,但其缺點也很明顯,計算復雜度太高。要分類一個數據,卻要計算所有數據,這在大數據的環境下是很可怕的事情。而且,當類別存在範圍重疊時,KNN分類的精度也不太高。所以,KNN比較適合小量數據且精度要求不高的數據。
KNN有兩個影響分類結果較大的函數,一個是數據歸一化,一個是距離計算。如果數據不進行歸一化,當多個特征的值域差別很大的時候,最終結果就會受到較大影響;第二個是距離計算。這應該算是KNN的核心了。目前用的最多的距離計算公式是歐幾裏得距離,也就是我們常用的向量距離計算方法。個人感覺,KNN最大的作用是可以隨時間序列計算,即樣本不能一次性獲取只能隨著時間一個一個得到的時候,KNN能發揮它的價值。至於其他的特點,它能做的,很多方法都能做;其他能做的它卻做不了。
第三個就是Naive Bayes了。Naive Bayes簡稱NB(牛X),為啥它牛X呢,因為它是基於Bayes概率的一種分類方法。貝葉斯方法可以追溯到幾百年前,具有深厚的概率學基礎,可信度非常高。Naive Baye中文名叫樸素貝葉斯,為啥叫“樸素”呢?因為其基於一個給定假設:給定目標值時屬性之間相互條件獨立。比如我說“我喜歡你”,該假設就會假定“我”、“喜歡”、“你”三者之間毫無關聯。仔細想想,這幾乎是不可能的。馬克思告訴我們:事物之間是有聯系的。同一個事物的屬性之間就更有聯系了。所以,單純的使用NB算法效率並不高,大都是對該方法進行了一定的改進,以便適應數據的需求。NB算法在文本分類中用的非常多,因為文本類別主要取決於關鍵詞,基於詞頻的文本分類正中NB的下懷。但由於前面提到的假設,該方法對中文的分類效果不好,因為中文顧左右而言他的情況太多,但對直來直去的老美的語言,效果良好。至於核心算法嘛,主要思想全在貝葉斯裏面了,沒啥可說的。
第四個是回歸。回歸有很多,Logistic回歸啊、嶺回歸啊什麽的,根據不同的需求可以分出很多種。這裏我主要說說Logistic回歸。為啥呢?因為Logistic回歸主要是用來分類的,而非預測。回歸就是將一些數據點用一條直線對這些點進行擬合。而Logistic回歸是指根據現有數據對分類邊界線建立回歸公式,以此進行分類。該方法計算代價不高,易於理解和實現,而且大部分時間用於訓練,訓練完成後分類很快;但它容易欠擬合,分類精度也不高。主要原因就是Logistic主要是線性擬合,但現實中很多事物都不滿足線性的。即便有二次擬合、三次擬合等曲線擬合,也只能滿足小部分數據,而無法適應絕大多數數據,所以回歸方法本身就具有局限性。但為什麽還要在這裏提出來呢?因為回歸方法雖然大多數都不合適,但一旦合適,效果就非常好。
Logistic回歸其實是基於一種曲線的,“線”這種連續的表示方法有一個很大的問題,就是在表示跳變數據時會產生“階躍”的現象,說白了就是很難表示數據的突然轉折。所以用Logistic回歸必須使用一個稱為“海維塞德階躍函數”的Sigmoid函數來表示跳變。通過Sigmoid就可以得到分類的結果。為了優化Logistic回歸參數,需要使用一種“梯度上升法”的優化方法。該方法的核心是,只要沿著函數的梯度方向搜尋,就可以找到函數的最佳參數。但該方法在每次更新回歸系數時都需要遍歷整個數據集,對於大數據效果還不理想。所以還需要一個“隨機梯度上升算法”對其進行改進。該方法一次僅用一個樣本點來更新回歸系數,所以效率要高得多。
第五個是決策樹。據我了解,決策樹是最簡單,也是曾經最常用的分類方法了。決策樹基於樹理論實現數據分類,個人感覺就是數據結構中的B+樹。決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關系。決策樹計算復雜度不高、輸出結果易於理解、對中間值缺失不敏感、可以處理不相關特征數據。其比KNN好的是可以了解數據的內在含義。但其缺點是容易產生過度匹配的問題,且構建很耗時。決策樹還有一個問題就是,如果不繪制樹結構,分類細節很難明白。所以,生成決策樹,然後再繪制決策樹,最後再分類,才能更好的了解數據的分類過程。決策樹的核心樹的分裂。到底該選擇什麽來決定樹的分叉是決策樹構建的基礎。最好的方法是利用信息熵實現。熵這個概念很頭疼,很容易讓人迷糊,簡單來說就是信息的復雜程度。信息越多,熵越高。所以決策樹的核心是通過計算信息熵劃分數據集。
我還得說一個比較特殊的分類方法:AdaBoost。AdaBoost是boosting算法的代表分類器。boosting基於元算法(集成算法)。即考慮其他方法的結果作為參考意見,也就是對其他算法進行組合的一種方式。說白了,就是在一個數據集上的隨機數據使用一個分類訓練多次,每次對分類正確的數據賦權值較小,同時增大分類錯誤的數據的權重,如此反復叠代,直到達到所需的要求。AdaBoost泛化錯誤率低、易編碼、可以應用在大部分分類器上、無參數調整,但對離群點敏感。該方法其實並不是一個獨立的方法,而是必須基於元方法進行效率提升。個人認為,所謂的“AdaBoost是最好的分類方法”這句話是錯誤的,應該是“AdaBoost是比較好的優化方法”才對。
總的來說,機器學習方法是利用現有數據作為經驗讓機器學習,以便指導以後再次碰到的決策。目前來說,對於大數據分類,還是要借助分布式處理技術和雲技術才有可能完成,但一旦訓練成功,分類的效率還是很可觀的,這就好比人年齡越大看待問題越精準的道理是一樣的。
機器學習分類