【1%】100小時機器學(xué)習(xí)——數(shù)據(jù)預(yù)處理

總目錄鏈接

數(shù)據(jù)預(yù)處理

前言:

  • What's This:我自己的學(xué)習(xí)筆記,如果你不想看GitHub们衙,這里搬運的應(yīng)該也很全面钾怔。
  • 為什么要學(xué)機器學(xué)習(xí):很厲害,應(yīng)用廣蒙挑,缺口大蒂教,解放人力,提升自己
  • 課程來源:YouTube上的大咖Siraj Raval就發(fā)起了一個挑戰(zhàn):#100DaysOfMLCode脆荷。
  • GitHUb地址:中文版本點這里 —— Here For English Edition
  • 學(xué)習(xí)計劃: 不強求每天都來凝垛,佛性隨性,每天課程量不大蜓谋,所以我把100天改成了100小時梦皮,所以只要堅持同等與兩周工作量的時間里,就能完成本課程桃焕。學(xué)到就是收獲剑肯。
  • 基礎(chǔ)要求: Python的使用

Start

Day 1.jpg

Step 0: 環(huán)境

Mine——Windows10x64, Python2.7观堂, Hyper(推薦让网,比原生的命令窗口好看一點。在人工智能飛速發(fā)展的當(dāng)下师痕,培養(yǎng)藝術(shù)審美能力是贏得未來的重要技能)

Step 1: 導(dǎo)入必要的庫

NumPy——用于實現(xiàn)大量的數(shù)學(xué)計算
Pandas——用于操作數(shù)據(jù)集
So easy溃睹, 直接Python pip安裝。
pip install Numpy
pip install Pandas
后邊數(shù)據(jù)預(yù)處理還會用到 sklearn庫
pip install sklearn
然后sklearn又依賴scipy
pip install scipy
還有一個必備的
pip install matplotlib
整理如下胰坟,可以直接復(fù)制粘貼進(jìn)行安裝相關(guān)依賴庫

pip install Numpy Pandas scipy sklearn matplotlib

裝這個可能要15分鐘左右因篇,可以去上個廁所,彈彈吉他笔横,打會兒太極拳竞滓,或者找女朋友聊會兒天。下邊的內(nèi)容等裝好了邊看邊動手做吹缔。

Step 2: 導(dǎo)入數(shù)據(jù)集

Data sets一般以.csv格式存儲商佑,內(nèi)容為純文本樣式的表格,每行代表了一條數(shù)據(jù)record.這里使用 pandas的 read_csv 方法讀取本地的csv文件作為數(shù)據(jù)幀厢塘, 然后從數(shù)據(jù)幀中制作自變量和因變量的矩陣(Matrix)和向量(Vector)茶没。
Data sets右鍵另存為下載

import numpy as np
import pandas as pd
data = r'your/path/to/store/Data.csv'
dataset = pd.read_csv(data)

看一眼dataset是啥樣子

dataset
   Country   Age   Salary Purchased
0   France  44.0  72000.0        No
1    Spain  27.0  48000.0       Yes
2  Germany  30.0  54000.0       No
3    Spain  38.0  61000.0        No
4  Germany  40.0      NaN       Yes
5   France  35.0  58000.0       Yes
6    Spain   NaN  52000.0        No
7   France  48.0  79000.0       Yes
8  Germany  50.0  83000.0        No
9   France  37.0  67000.0       Yes

繼續(xù)操作
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
這里可以理解為類似Python序列的分片操作,得到自己想要的數(shù)據(jù)組合
看一下我們的X俗冻,Y:

>>> X
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, nan],
       ['France', 35.0, 58000.0],
       ['Spain', nan, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)

>>> Y
array(['No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes'],
      dtype=object)

Step 3: 處理丟失的數(shù)據(jù)

對于數(shù)據(jù)的完整性來說礁叔,我國偉大的文學(xué)家蘇軾早就有了“此事古難全”的重要論斷。因此為了不影響機器學(xué)習(xí)模型的性能迄薄,我們用同類數(shù)據(jù)的均值或中間值來替代琅关。此處用到sklearn.preprocessing庫中的Impputer類來完成相關(guān)操作。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])

簡單解釋一下代碼,導(dǎo)入就不用說了涣易,
第一句是初始化了一個imputer類画机,傳入的參數(shù)分別為missing_values,設(shè)置為NaN新症,替換策略strategy為mean步氏,即用均值替代丟失值,axis設(shè)置為0徒爹。
第二句用新建的imputer類來fit一下X荚醒。
第三句完成缺失數(shù)據(jù)的替代。
Step2得到的X變成了如下內(nèi)容:

>>> X
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, 63777.77777777778],
       ['France', 35.0, 58000.0],
       ['Spain', 38.77777777777778, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)

Step 4: 編碼分類數(shù)據(jù)

分類數(shù)據(jù)(Categorical Data)指的是非數(shù)字類型的變量隆嗅,通常以標(biāo)簽值的形式出現(xiàn)界阁,例如本例中的‘Yes’和‘No’,對于模型的數(shù)學(xué)計算胖喳,需要把它們編碼成數(shù)字泡躯。這里用到的是sklearn.preprocessing庫中的LabelEncoder類。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])

##Creating a dummy variable
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

經(jīng)過轉(zhuǎn)化丽焊,X和Y的變化如下:

>>> X
array([[0L, 44.0, 72000.0],
       [2L, 27.0, 48000.0],
       [1L, 30.0, 54000.0],
       [2L, 38.0, 61000.0],
       [1L, 40.0, 63777.77777777778],
       [0L, 35.0, 58000.0],
       [2L, 38.77777777777778, 52000.0],
       [0L, 48.0, 79000.0],
       [1L, 50.0, 83000.0],
       [0L, 37.0, 67000.0]], dtype=object)

>>> X
array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01, 7.20000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01, 4.80000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01, 5.40000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01, 6.10000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01, 6.37777778e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01, 5.80000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01, 5.20000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01, 7.90000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01, 8.30000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01, 6.70000000e+04]])

>>> Y
array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1], dtype=int64)

Step 5: 將數(shù)據(jù)集分為測試集和訓(xùn)練集

我們通常把數(shù)據(jù)集按照“二八原則”分為訓(xùn)練集(training set)和測試集(test set)较剃,前者用于訓(xùn)練模型,占80%技健;后者用于測試驗證模型写穴,占20%。這里用sklearn.crossvalidation庫中的train_test_split()方法凫乖。

from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

Step 6: 特征縮放

大部分模型算法計算兩個數(shù)據(jù)點的歐式距離确垫,導(dǎo)致的問題就是幅度變化不好控制弓颈,高幅度的特征比低幅度的特征權(quán)重更大帽芽。解決這個問題的方法是特征標(biāo)準(zhǔn)化或Z值歸一化。這里用sklearn.preprocessing庫的StandardScalar類翔冀。

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)

總結(jié)

To Be Honest导街, 第一天主要就是個入門和環(huán)境搭建的上手,用Python作為工具纤子,簡述了進(jìn)行機器學(xué)習(xí)的前6個步驟搬瑰,并用相應(yīng)的庫簡單輕松的完成了操作,不要覺得無聊控硼,繼續(xù)下去泽论,會有新收獲!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卡乾,一起剝皮案震驚了整個濱河市翼悴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幔妨,老刑警劉巖鹦赎,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谍椅,死亡現(xiàn)場離奇詭異,居然都是意外死亡古话,警方通過查閱死者的電腦和手機雏吭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陪踩,“玉大人杖们,你說我怎么就攤上這事〖缈瘢” “怎么了胀莹?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婚温。 經(jīng)常有香客問我描焰,道長,這世上最難降的妖魔是什么栅螟? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任荆秦,我火速辦了婚禮,結(jié)果婚禮上力图,老公的妹妹穿的比我還像新娘步绸。我一直安慰自己,他們只是感情好吃媒,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布瓤介。 她就那樣靜靜地躺著,像睡著了一般赘那。 火紅的嫁衣襯著肌膚如雪刑桑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天募舟,我揣著相機與錄音祠斧,去河邊找鬼。 笑死拱礁,一個胖子當(dāng)著我的面吹牛琢锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呢灶,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼吴超,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸯乃?” 一聲冷哼從身側(cè)響起鲸阻,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赘娄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仆潮,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年遣臼,在試婚紗的時候發(fā)現(xiàn)自己被綠了性置。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡揍堰,死狀恐怖鹏浅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屏歹,我是刑警寧澤隐砸,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蝙眶,受9級特大地震影響季希,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幽纷,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一式塌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧友浸,春花似錦峰尝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伦意,卻和暖如春火窒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背默赂。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工沛鸵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缆八。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像疾捍,于是被迫代替她去往敵國和親奈辰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容