1. 程式人生 > >如何提高機器學習中的分類準確率

如何提高機器學習中的分類準確率

1.      擴大資料集。俗話說的好,更好的資料往往能打敗更好的演算法。當我們想要提高機器學習的分類準確率時,第一個可用的方法就是擴大資料集。只要機器學習花費的時間在可以接受的範圍內,就可以繼續擴大資料集,它往往可以使我們獲得更理想的分類準確率。

2.      分類器選擇。遺憾的是,理想的資料集規模往往是我們可望不可即的。這時,我們應該想到的就是選擇適合的分類器。以weka為例,如果你使用的訓練集較小,那麼高偏差/低方差分類器(如樸素貝葉斯)將會是你較優的選擇。然而,隨著訓練集的增大,低偏差/高方差分類器(如k近鄰)將提供更好的分類結果,因為它們具有較低的漸近誤差,而高偏差分類器則不足以提供準確的模型。此外,資料的各個屬性是離散值還是連續值,資料噪聲的大小等都可以成為選擇分類器的依據。

3.      屬性子集選擇。好馬需配好鞍。在我們選擇了合適的分類器後,還需要進行的一項工作就是資料屬性子集的選取,也就是選出那些與類別屬性相關性較強的,去除不相關和冗餘的屬性。這項工作如果人工來做的話,是十分複雜且困難的。不過,好在很多機器學習工具都為我們提供了這項功能,還以weka為例,它為我們提供了一個工具——屬性評估器。屬性評估器分類兩類:一是屬性子集評估器,它的作用是為我們返回一個“最優”(是否真的最優,還需進行驗證)的屬性子集。二是單個屬性評估器,它通過將給定數目的屬性進行排序,得到了一個直觀的屬性排名列表,我們可以自己把那些排名靠前的屬性選出來,並用它們進行分類,從而提高準確率。

4.      整合學習。俗話說的好,三個臭皮匠賽過諸葛亮。機器學習也是如此,整合學習的目標就是通過把若干個弱學習器組合起來,使其成為一個強學習器,從而獲得更好的分類準確率。關於強、弱學習器的定義,大家有興趣可以百度,我就不贅述了。然後,關於在程式設計中如何實現整合學習,我給大家一個傳送門:http://blog.csdn.net/anqiang1984/article/details/4045903。最後,我再強調一點,在整合的過程中,選擇哪些弱學習器進行整合呢?有個判斷標準,一是弱學習器的準確率越高越好,二是這些弱學習器之間的差異性越大越好。根據這兩個標準進行選擇性整合將會獲得很不錯的效果。

5.      演算法改進。這點非常難,尤其是在機器學習已經發展了那麼多年,無數大牛先後投入其中的情況下,想要改進演算法是我們一般人做不到的。但是,也存在一種可能,就是當我們利用機器學習解決某個特定領域的問題時,也許可以利用我們對該領域知識的掌握,比如該領域資料有何特點,來對某一演算法進行適當的調整,以使得該演算法可以更好地應用在這個領域的資料上,從而獲得更好的效果。如果有哪位朋友有相關的工作經歷或者經驗,也希望您能和大家分享一下。

以上只是我剛剛接觸機器學習後的一點點總結,肯定存在很多錯誤,還希望大家多多批評指正。