鳶尾花分類案例可能是機器學習里面最經(jīng)典的入門案例,新手可能都會遇到它,這篇文章純粹從概念上進行分析脓规,沒有任何正式的代碼晓猛,希望完全沒有編程基礎的人也能看懂饿幅。
鳶尾花課題
我們要解決的問題如下
已知鳶尾花iris分為三個不同的類型:山鳶尾花Setosa、變色鳶尾花Versicolor戒职、韋爾吉尼婭鳶尾花Virginica栗恩,這個分類主要是依據(jù)鳶尾花的花萼長度、寬度和花瓣的長度洪燥、寬度四個指標(也可能還有其他參考)磕秤。我們并不知道具體的分類標準,但是植物學家已經(jīng)為150朵不同的鳶尾花進行了分類鑒定捧韵,我們也可以對每一朵鳶尾花進行準確測量得到花萼花瓣的數(shù)據(jù)市咆。
那么問題來了,你女朋友家的一株鳶尾花開花了,她測量了一下再来,花萼長寬花瓣長寬分別是3.1蒙兰、2.3、1.2芒篷、0.5搜变,然后她就問你:“我家這朵鳶尾花到底屬于哪個分類?”
表格說明:橫行屬于一朵花的數(shù)據(jù)
Dataset Order:數(shù)據(jù)集序號(沒什么用)
Sepal length/width:花萼的長度/寬度數(shù)據(jù)
Petal length/width:花瓣的長度/寬度數(shù)據(jù)
Species:植物學家鑒定的花的類型
難點在哪梭伐?
作為一個傳統(tǒng)程序員痹雅,一定會很崩潰,因為我們不清楚具體的分類標準糊识,也不能用類似下面這種條件判斷解決問題:
if(SepalLength>4.1 && SepalLength<2.2 &&....) {
return “Setosa”
}else(...){
return “Versicolor”
}...
我們不知道是>4.1還是>4.2合適...我們必須從植物學家給我們的150條數(shù)據(jù)中找出規(guī)律绩社。
事情并不那么容易摔蓝,植物學家可能完全沒有對花朵測量,完全憑感覺進行的鑒定愉耙,所以他的頭腦里根本沒有大于小于贮尉,根本沒有if...else...
甚至我們都不能斷定花萼長度這個特征是否可以用2個分界值分成大、中朴沿、小三個數(shù)據(jù)猜谚,因為植物學家在頭腦里可能把花萼長度分成了特大、大赌渣、中魏铅、小、超小五個級別坚芜,他認為長度特大或中+花萼寬度中或小+花瓣寬度特特大或特大或大+花瓣長度小或超小的才是Setosa:
這就尷尬了览芳。
解決思路
我們必須要從這個邏輯深坑里跳出來,換個思考方式鸿竖。
不要再想去尋找臨界值的事情了沧竟!
我們需要的是一個方法函數(shù),輸入一朵新花的4個測量數(shù)據(jù)缚忧,這個方法就能返回三種分類中的一種悟泵。
或者寫作
或者是這樣的代碼
function guess(rowData){
string species;
...do something...
return species
}
guess([2.1,3,4.2,0.3]);
//輸出Versicolor
幸運的是,研究機器學習的科學家已經(jīng)為我們提供了一些成熟的算法闪水,這些算法可以自動從我們150條數(shù)據(jù)中尋找規(guī)律糕非,并自動為我們生成所需要的分類方法函數(shù)。
機器學習
機器學習是如何分析數(shù)據(jù)并找到規(guī)律的敦第?
某智商不高的機器學習科學家發(fā)明了最糟糕的分類方法峰弹,叫做random亂猜分類器:
function guess(rowData){
string species;
int n=random()%3; //隨機數(shù)除以3的余數(shù),0或1或2
if(n==0){
species="Virginica";
}else if(n==1){
species="Versicolor";
}else if(n==2){
species="Setosa";
}
return species
}
這是一個毫無技術含量的分類方法芜果,但它形式上的確符合我們需要的預期。對于任何一朵新的鳶尾花融师,這個函數(shù)有33.3%猜對右钾。(當然,如果植物學家也真是亂猜亂鑒定的旱爆,那么我們這個亂猜分類器就是最合適不過的舀射,——雖然random不會與植物學家腦子吻合,但是任意其他辦法也不會更有效了)
另外一個也比較容易理解的分類器是KNN最近鄰分類方法怀伦,簡單說就是把150朵花的數(shù)據(jù)記在本子上脆烟,當有人把新花的測量數(shù)據(jù)給我的時候,我們就計算新花數(shù)據(jù)和我們本子上拿朵花最接近房待,最接近的那朵花的分類就應該是新花的分類邢羔。
以上兩個分類方法在我的這個文章里面都有詳細介紹和正式代碼實現(xiàn)驼抹,并且里面還有另外一個也能夠讀懂的確定樹分類器的介紹。
Scikit-learn-iris-macOS-案例-機器學習入門
Tensorflow使用更加復雜的神經(jīng)網(wǎng)絡分類器拜鹤,可以處理比上面這種情況復雜幾百幾千倍的難題框冀,比如圖像識別、語音識別等敏簿。后續(xù)我們會一起慢慢深入到機器學習和人工智能的最內(nèi)部去弄明白這一切明也。
探索人工智能的新邊界
如果您發(fā)現(xiàn)文章錯誤,請不吝留言指正惯裕;
如果您覺得有用温数,請點喜歡;
如果您覺得很有用蜻势,感謝轉(zhuǎn)發(fā)~
END