1. 程式人生 > >重回機器學習-《python機器學習及實踐》讀書筆記二

重回機器學習-《python機器學習及實踐》讀書筆記二

一.三個率

        機器學習模型訓練好之後,會在樣本外進行測試,然後我們可以得到三個“率”:

  1. 準確率
  2. 召回率
  3. 精確率

        其實這些也沒有什麼大不了的,大家如果學習過基本的統計學的話就會知道,這就是所謂的一類錯誤、二類錯誤的一個變體。

        首先是準確率,這個最好理解,就是你的模型在樣本外測試中正確的次數。當然,我們討論的前提都是一個二分類問題。這三個“率”是這麼定義的:

        這就是書中的公式,Accuracy就不說了。召回率比較有意思,是猜對的原本為真的數目作為分子,然後分母是所有猜對的數目。也就是你模型正確預測中某一型別的佔比。精確率是某一型別總數中正確預測的佔比。有點繞,理解一下就行。

        為了調和精確率和召回率,還有一個F1指標,其實就是精確率和召回率的調和平均。調和平均有一個特點,會對調和平均的物件的方差進行懲罰。

        也就是說,精確率和召回率越接近,那麼F1指標會越好,當然,前提是兩個算術均值相同的前提下。

二、缺失值的填充

        機器學習建模中也好,量化模型建模中也好,資料預處理永遠是逃不過的,也是最重要的步驟。而其中缺失值的填充是一個繞不開的話題。

        在書中的坦坦尼克的例子中,就用了一種最簡單的缺失值填充的方法,均值填充。這種方法其實是在沒有任何資訊的前提下,處於不影響現有資訊的目的而採用的。實際過程中,我們可能還會根據資料的分佈採用中位數之類的。

        更加複雜的缺失值填充方法有很多,可以單獨建立一個缺失值填充模型。譬如量化中的barra模型採用的因子值的缺失值填充方法,就是採用線性模型填充法。原本對於缺失值填充方法就很有藝術性。

import pandas as pd
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
X = titanic[['pclass', 'age', 'sex']]
y = titanic['survived']
X['age'].fillna(X['age'].mean(), inplace=True)

        資料內容大概是這樣的:

三、型別資料

        sklearn中有自帶的型別資料處理,其實就是變成一個啞變數。

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
vec.fit_transform(X.to_dict(orient='record'))

         最後得到的每一條記錄變現下面這樣的了:

        簡單解釋一下,就是原來的age由於是數字,所以依然保留,而後面的pclass和sex則被sklearn自動識別為類別變數,然後自動轉化為啞變數的。啞變數的含義如下,可以通過feature_names_方法來獲得。

        這裡有一個不怎麼常用的pandas的to_dict方法。這個方法給大家仔細解讀一下。

四、to_dict方法

        預設的to_dict方法其實就是一層一層的字典,先是列名,然後是index,然後是value

        我們上面用到的,record設定就變成了每一條記錄變成一個字典,最後是一個list。這也就是record的含義了。

        設定為list的話,那麼字典中就是columns names最為keys,每一列,也就是每個屬性下面的所有值作為一個list成為字典的values。

        還有一個屬性是split這個比較有意思。首先是,諷刺啦index,data,columns。其實分別給出了整個dataframe的結構。