1. 程式人生 > >Python-機器學習 入門及技巧總結

Python-機器學習 入門及技巧總結

隨著這兩年人工智慧的快速發展,機器學習與深度學習行業炙手可熱,對於那些想進入這個行業的同學們,小編在這裡給大家介紹一下自己的心得體會以及利用Python的一些小技巧,希望對大家有所幫助。

在機器學習方面,對於想入門的新手,首先不得不提就是斯坦福大學的Andrew Ng-吳恩達,他在例如Coursera等網站上面的課程非常適合新手,並且當你入門之後,回頭再看,又會有新的收穫,在這裡我把相應的連結放在這裡Machine Learning | Coursera

對於一個機器學習工程,或者參加例如kaggel、天池之類的比賽也好,流程都是類似的,小編在這裡對前人的工作進行了一下總結。流程如下:

  1. 對資料進行簡單的清洗與處理,得到一些基本特徵。
  2. 建立簡單的機器學習模型,按照重要性對特徵進行排列。
  3. 根據得到的特徵排列,有針對的進行特徵工程,提取特徵
  4. 重複上述過程,不斷的優化自己的模型,找到關鍵的特徵
  5. 對模型的引數進行調參,採用例如grid search的方法找到最優引數
  6. 進行模型融合,採用如Stacking 的方法得到最佳模型組合

對於實際的機器學習工程問題,資料的獲取以及清洗是一件非常頭疼事情,在這個方面要花費非常大的精力,而我們上述的流程比較適合一些初步清洗較好的資料,比較適用於一些比賽專案流程。

好了,說完機器學習基本流程,下面我們來說一下技巧了。目前,在機器學習方面最流行的有兩種語言,一個是R,另外一個是Python,在這裡小編介紹一下利用Python進行機器學習的一些小技巧,這些技巧對於大家的特徵工程都有很大的幫助。

1. 資料讀取

一般採用Python 的pandas 包,大部分資料集都可以利用它來讀取,如pd.read_csv

資料檢視DataFrame.describe() 或 head()

圖片採用PIL或者OpenCV

2. 資料分析

2.1一元分析

資料視覺化對分析資料有著非常大的幫助,幫助我們更加直觀地理解資料。

工具Seaborn matplotlib

某資料概率分佈圖


對資料採用去除異常值或者進行變換,如對數變換等,將其變為更加符合正態分佈的資料集。

mean=np.mean(y_train)std=np.std(y_train)y_train_index=y_train[y_train>mean-3*std][y_train

一元分析-資料及工具

資料型別:

  1. 數值型
  2. 非數值型

對於普通一元資料,對其分佈進行檢視:

一元分析圖

對於經常出現的時間特徵,我們通常利用Python的datetime 工具包:

時間型別與字串的變換

Python的時間包,可以幫助我們提取年、月、日、星期等資料,方便我們進行更加詳細的分析。

對於非數值型工具:

在機器學習模型中,計算機僅僅能識別數字,所以我們需要將任何型別的資訊轉化為數值資訊,對於一些分類字串特徵,如男、女,我們採用一些Python的函式,可以方便的對其進行處理。

而對於一些非常長的字串資訊,我們則需要利用Python pandas的內建一些字串函式進行處理,它讓我們像C語言中處理字串一樣,可以同時對每一個特徵進行處理:

除上述情況中,有一些資料是分類特徵,這種資料又可以分為兩類,一種是可以比較大小的,如衣服的尺碼,是s、m、和、l,他們之間的大小比較是有意義的,另一種分類資料與其不同,他們是不能用大小去衡量的,如顏色,藍色、綠色和黃色,代表三種類別,但是他們之間卻沒有大小的差別。所以,我們往往對這些資料進行編碼,一般採用三種方式:

  • 虛擬變數或者啞變數
  • 普通編碼
  • onehot 編碼

2.2 多元分析

我們仍從資料視覺化入手。

函式工具及一般引數與上述函式對應的視覺化圖例子

Seaborn一個Python中非常適合做資料分析的包,它有許許多多繪圖模式供我們使用。其中pairplot 可以幫助我們分析一組資料任意兩個變數之間的分佈關係,heatmap可以幫助我們分型一組資料之間相關性,boxplot與violinplot可以幫助我們理解兩三組變數之間的分佈關係。

下面介紹一些常用的多元分析函式。

1.靈活運用索引

Python作為資料分析工具,最大的特點就是簡單、靈活,我們對索引的靈活運用可以幫助我們快速方便的分析資料。如利用索引得到某一列資料中滿足一些條件的資料:

df['Family'][titanic_df['Family'] > 0] = 1

df[‘Family’][titanic_df[‘Family’].notnull()]

2.常用函式

  • DF.drop('column_name',axis=1, inplace=True)
  • Pd.merge(left,right, how=‘inner’, on=‘left’)
  • DF.Groupby()

上述函式可以對資料進行刪除、合併以及分組。其中分組函式groupby是一個非常強大的工具,下面我們詳細的介紹一下它的兩種用法;

迭代與非迭代方法

3. 模型建立

當資料分析完之後,我們需要建立機器學習演算法模型,下面我們稍微介紹一下陳天奇大神的XGBOOST演算法,,這個演算法在各種比賽大放異彩,速度快,效果好,xgb常用的演算法引數有:




一般而言,大家使用這個演算法都採用兩種方式,第一種直接利用該模型訓練,第二種,採用演算法包中的分類器或者回歸器進行擬合,下面是兩個例子分別對應兩種方法:

第一種方法第二種用法

在第二種用法中,我們採用了交叉驗證的方式,來評估我們的模型。

4. 模型融合

模型融合的方式有很多種,並沒有一個統一的方法,並且,根據實際情況,需要設計出效果最好的模型,最簡單的模型融合,如多數投票表決,或者類似於多模型預測取平均等,我們這裡介紹一下較為常用的stacking:

stacking

上面這幅圖就是stacking的流程圖,它採用五個模型進行融合,每個模型得到一個預測值,然後利用這五個預測值作為新的特徵,再重新建立一個模型,最終得到預測結果。對上述圖需要注意的是,每個模型對資料進行了預測,在這個預測過程中,將資料集進行了劃分,最後的預測結果是多次預測取平均。