為什麼要找到乙個好的特徵?

2021-09-11 13:52:10 字數 1999 閱讀 4314

好,話不多說,今天讓我們來一起分享下怎麼樣來去選擇乙個好的特徵,並且當我們區分出好的特徵的時候,好的特徵意味著什麼。

在這一篇文章中,我們將會用到機器學習的分類器來作為貫穿整篇文章的例子,因為分類器只有在我們提供了好的特徵以後才可以為我們的發揮出自己的好的效果,這也意味著找到好特徵是機器學習能夠學好的乙個重要的前提之一,那麼這個時候問題就來了,什麼是好特徵?你怎麼知道他算得上是好特徵?接下來,讓我們來解決這些問題。

我們用特徵來描述乙個物體,比如說在這一類物體中,他們有長度,顏色,這兩種特徵的屬性,那麼用這個特徵來描述這個類別的時候,好的特徵會讓我們更加輕鬆的來辨別出相應特徵所代表的類別,而不好的特徵會混亂我們的感官,會讓一些沒有用的分析來浪費我們的分析和計算資源。

好,現在我們來找乙個更加貼近生活的例項。想想我們家都養的可愛的狗狗吧。比如說金毛和吉娃娃,他們其實可以有很多的特徵進行對比,比如說眼睛的顏色,毛色,體重,身高,長度等等,為了簡化上述的多種型別,我們接下來主要會用毛色,身高這兩種屬性,並且我們也只假設這兩種狗只有偏黃色和偏白色這兩種顏色屬性。

那我們先來開始對比毛色,那麼在我們構造的這個虛擬世界上有多少偏黃色或者偏白色的金毛呢?結果發現實際上偏黃色和偏白色的金毛都基本各佔一半,並且當我們分析吉娃娃的時候,發現吉娃娃的顏色其實也是可以對半分的,這個時候我們將這些資料用兩種屬性展示出來,偏黃和偏白,然後我們分別用黃色和白色來分別表示吉娃娃所表示的比例,當我們得出資料做出我們可以很好觀察到的表文時,我們會發現,無論是在偏黃的屬性還是偏白的屬性,吉娃娃和金毛的比例是大致相同的,如果這個時候再給你乙隻偏黃的狗,你是無法僅憑顏色來分辨出這是只吉娃娃還是只金毛,這其實就意味著通過毛色來判斷這個狗是吉娃娃還是金毛是不恰當的。這個特徵在區分品種上其實並沒有起到什麼什麼作用,所以這個時候我們就要區分這些無意義的資訊。

那麼當這個毛色無法作為乙個有效的特徵值的時候,我們是不是想一想身高是不是可以作為乙個很優秀的特徵值呢?雖然說身高是一些很抽象的特徵數字,但是我們同樣可以將身高和這些資料進行視覺化關聯,這個時候我麼就可以用python來進行視覺化的操作。

首先我們先輸入python中所需要的模組matplotlib和numpy,然後用兩個簡稱來定義金毛和吉娃娃,分別是gold和chihh,並且各定義每種狗各有400個樣本,然後生成一些身高的資料,現在我們假設金毛的身高為40cm,吉娃娃是25cm,並且因為每乙隻狗的身高都不是乙個固定的數值,我們這個時候就給每只狗加上乙個隨機的變數,金毛的隨機幅度可能大一些,吉娃娃的隨機幅度可能小一些,,最後我們用柱狀圖來表示金毛和金娃娃的數量個數,藍色代表吉娃娃的個數,紅色代表金毛的數量個數。

這個時候我們拿這個圖來具體說說,圖中有很多的資料,當我們選擇高度為50cm的時候,我們就基本上可以判定這只狗是金毛了,同樣大於50cm的都是金毛,當我們在20cm的時候,我們其實也可以有相當大的信心說這只狗是吉娃娃,但是在當我們切換到30-40這個資料的時候,我們這個時候就不能夠很肯定的說這只狗到底是金毛還是吉娃娃。在這個高度因為每一種狗的數量基本都差不多,所以說在這個高度之間的狗狗我們實際上是無法可以很好地用這個高度的特徵來判斷這個狗的品種,因為這個特徵並不完美,這其實也就是我們為什麼要包含更多的特徵來去處理機器學習中的特徵的問題。

這個時候當我們要獲得更多的資訊,我們就應該排除掉那些並不具備區分能力的資訊,就像我們剛才提到的顏色其實並不是什麼有用的資訊,而高度能用,並且我們就應該找到更多的資訊來去彌補高度所不能描述的那一段,比如說狗狗的體重,狗狗的眼鏡的顏色,狗狗的耳朵長得怎麼樣等等。當我們將這些資訊加起來,往往就能夠彌補單一資訊所缺失的資訊量,有時候,我們也會有很多的單一的特徵資訊的資料,有一些資料雖然他們的資訊雖然沒有重複,但是他們所描述的意義卻是相近的,比如說我們在描述距離的時候,資料裡有裡或者是公里,雖然他們在數值上並不重複,但是實際上他們表示的卻是同乙個意思。在機器學習中特徵越多越好,但是像那兩種型別相近的資訊並不會對他有用,所以我們要區分重複性的資訊。並且我們每個點都是帶有經緯度,如果我們用經緯度來表示兩地之間的距離,這個顯然比用公里來麻煩的多,所以在機器學習中,選取兩者特徵值是一定要避免複雜的資訊,因為特徵與結果的模型越簡單,機器學習就能夠更好的學習到東西。

所以在我們選擇特徵的時候,我們要時刻想到這三點,避免無意義的資訊,避免重複性的資訊,避免複雜的資訊。

我為什麼要開發乙個 MixPHP 框架

最近業餘時間一直在開發expressphp的第二個版本 mixphp,今天下班想起之前乙個面試官的問題 你為什麼還要再造乙個輪子呢?仔細回想,第乙個版本,現在想來確實 炫技 的成份比較多,現在推翻第一版,又重構乙個所謂的 高效能php框架 這東西又不賺錢,我到底為了啥?其實,寫程式和寫詩有很多相似之...

為什麼區間個切片要忽略最後乙個元素

這個問題在fluent python提到,同時引了計算機edsger w.dijkstra的解釋。簡要記錄如下 當我們想取出2,3,12這個區間時,共有四種表示式可選 a 2 i 13 b 1 i 12 c 2 i 12 d 1 i 13 其中a b 表示式可以從兩端相減得到區間長度,這是其中乙個優...

php 為什麼new乙個物件後面要加乙個反斜槓

通俗點解釋就是 指定物件具體的型別。在沒有引入將類檔案引入當前檔案時,php無法知曉你需要使用的是什麼類 相同命名空間的類檔案除外 所以 為了防止 存在多個同名類檔案,php需要你指定具體的類檔案,帶反斜槓其實就是 命名空間 路徑的表示。php反斜線做命名空間分隔符 因為使用了php的命名空間,演示...