熱線電話:13121318867

登錄
首頁精彩閱讀數據分析之數據挖掘入門指南
數據分析之數據挖掘入門指南
2022-10-25
收藏

數據分析

探索性數據分析(Exploratory Data Analysis,EDA)是指對已有數據在盡量少的先驗假設下通過作圖、制表、方程擬合、計算特征量等手段探索數據的結構和規律的一種數據分析方法。

圖片

常用的第三方庫

數據科學庫

  • pandas:用于分組、過濾和組合數據,還提供了時間序列功能。
  • numpy:處理大型的多維數組和矩陣
  • scipy:用于解決線性代數、概率論、積分計算等任務

數據可視化

  • matplotlib:構建各種圖表,從直方圖散點圖到非笛卡爾坐標圖等
  • seaborn:提供了豐富的可視化圖庫,包括時間序列、聯合圖和小提琴圖等復雜的類型。

常用函數

數據簡略觀測

  • head():觀察數據讀取是否準確,常讀取前5行數據。
  • shape:讀取數據集的維度。

數據總覽

  • describe():包含每列的統計量,個數、平均值、方差、最小值、中位數、最大值等。
  • 數據類型info():了解數據每列的type,了解是否存在除了nan以外的特殊符號異常。

數據檢測

缺失值檢測

  • 查看每列的存在nan情況
  • 排序函數sort_values():將數據集依照某個字段中的數據進行排序,該函數即可根據指定列數據也可根據指定行的
  • 可視化nan值與缺失值

異常值檢測

  • 3σ原則:拉依達準則,該準則具體來說,就是先假設一組檢測數據只含有隨機誤差,對原始數據進行計算處理得到標準差,然后按一定的概率確定一個區間,認為誤差超過這個區間的就屬于異常值。
  • 箱線圖:依據實際數據繪制,真實、直觀地表現出了數據分布的本來面貌,且沒有對數據作任何限制性要求(3σ原則要求數據服從正態分布或近似服從正態分布),其判斷異常值的標準以四分位數和四分位距為基礎。

預測分布

總體分布概況:

圖片

很多模型假設數據服從正態分布,數據整體服從正態分布,樣本均值和方差則相互獨立。當樣本不服從正態分布時,可以做如下轉換:

  • 線性變化z-scores:基于原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。將A的原始值x使用z-score標準化到x’
  • Boxcox變換:一種廣義冪變換方法,是統計建模中常用的一種數據變換,用于連續的響應變量不滿足正態分布的情況。
  • yeo-johnson變換:是冪變換(power transformation)的方法之一,通過構建一組單調函數對隨機變量進行數據變換。

查看skeness 和kurtosis

  • skeness:衡量隨機變量概率分布的不對稱性,是相對于平均值不對稱程度的度量,通過對偏度系數的測量,我們能夠判定數據分布的不對稱程度以及方向。
  • kurtosis:研究數據分布陡峭或平滑的統計量,通過對峰度系數的測量,我們能夠判定數據相對于正態分布而言是更陡峭/平緩。

圖片

預測值的具體頻數

當某范圍預測值很少時,可將其當作異常值處理填充或刪除。若頻數很失常,需對數據進行處理,例如進行log變換,使數據分布較均勻,可據處理后的數據進行預測,這也是預測問題常用的技巧。

特征分析

數字特征

  • 相關性分析:對兩個或多個具備相關性的變量元素進行分析,從而衡量兩個變量因素之間的相關密切程度。
  • 特征的偏度和峰度
  • 數字特征分布可視化
    • pd.melt():處理數據,透視表格,可將寬數據轉化為長數據,以便于后續分析。形成的數據即為,鍵:各特征名稱,值:特征對應的值
    • sns.FacetGrid() :先sns.FacetGrid()畫出輪廓,再map()填充內容
    • sns.pairplot():展示變量兩兩之間的關系(線性或非線性,有無較為明顯的相關關系)。

類別特征

  • unique分布:對于一維數組或者列表,unique函數去除其中重復的元素,并按元素由大到小返回一個新的無元素重復的元組或者列表。
  • 可視化:
    • 箱型圖可視化:直觀識別數據中的離群點,判斷數據離散分布情況,了解數據分布狀態。
    • 小提琴圖可視化:用于顯示數據分布及概率密度,這種圖表結合了箱形圖和密度圖特征,主要用來顯示數據的分布形狀
    • 柱形圖可視化類別
    • 每個類別頻數可視化

數據清洗

數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。俗話說:garbage in, garbage out。分析完數據后,特征工程前,必不可少的步驟是對數據進行清洗。

數據清洗作用是利用有關技術如數理統計、數據挖掘或預定義的清理規則將臟數據轉化為滿足數據質量要求的數據。主要包括缺失值處理、異常值處理、數據分桶、特征歸一化/標準化等流程。

圖片

缺失值處理

關于缺失值處理的方式, 有幾種情況:

  • 不處理:針對xgboost等樹模型,有些模型有處理缺失的機制,所以可以不處理;
  • 如果缺失的太多,可以考慮刪除該列;
  • 插值補全(均值,中位數,眾數,建模預測,多重插補等);
  • 分箱處理,缺失值一個箱。

異常值處理

常用的異常值處理操作包括BOX-COX轉換(處理有偏分布),箱線圖分析刪除異常值, 長尾截斷等方式, 當然這些操作一般都是處理數值型的數據。

  • BOX-COX轉換:用于連續的變量不滿足正態的時候,在做線性回歸的過程中,一般需要做線性模型假定。
  • 箱線圖分析:依據實際數據繪制,真實、直觀地表現出了數據分布的本來面貌,其判斷異常值的標準以四分位數和四分位距為基礎。

數據分桶

連續值經常離散化或者分離成“箱子”進行分析, 為什么要做數據分桶呢?

  • 離散后稀疏向量內積乘法運算速度更快,計算結果也方便存儲,容易擴展;
  • 離散后的特征異常值更具魯棒性,如 age>30 為 1 否則為 0,對于年齡為 200 的也不會對模型造成很大的干擾;
  • LR 屬于廣義線性模型,表達能力有限,經過離散化后,每個變量有單獨的權重,這相當于引入了非線性,能夠提升模型的表達能力,加大擬合;
  • 離散后特征可以進行特征交叉,提升表達能力,由 M+N 個變量編程 M*N 個變量,進一步引入非線形,提升了表達能力;
  • 特征離散后模型更穩定,如用戶年齡區間,不會因為用戶年齡長了一歲就變化

當然還有很多原因,LightGBM 在改進 XGBoost 時就增加了數據分桶,增強了模型的泛化性?,F在介紹數據分桶的方式有:

  • 等頻分桶:區間的邊界值要經過選擇,使得每個區間包含大致相等的實例數量。比如說 N=10 ,每個區間應該包含大約10%的實例。
  • 等距分桶:從最小值到最大值之間,均分為 N 等份;
  • Best-KS分桶:類似利用基尼指數進行二分類;
  • 卡方分桶:自底向上的(即基于合并的)數據離散化方法。它依賴于卡方檢驗:具有最小卡方值的相鄰區間合并在一起,直到滿足確定的停止準則。

數據轉換

數據轉換的方式有:

  • 數據歸一化(MinMaxScaler);
  • 標準化(StandardScaler);
  • 對數變換(log1p);
  • 轉換數據類型(astype);
  • 獨熱編碼(OneHotEncoder);
  • 標簽編碼(LabelEncoder);
  • 修復偏斜特征(boxcox1p)等。

特征工程

特征工程指的是把原始數據轉變為模型訓練數據的過程,目的是獲取更好的訓練數據特征。特征工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。

圖片

特征構造

特征構造的時候需要考慮數值特征,類別特征,時間特征。

  • 數值特征,一般會嘗試一些它們之間的加減組合(當然不要亂來,根據特征表達的含義)或者提取一些統計特征
  • 類別特征,我們一般會嘗試之間的交叉組合,embedding也是一種思路
  • 時間特征,這一塊又可以作為一個大專題來學習,在時間序列的預測中這一塊非常重要,也會非常復雜,需要就盡可能多的挖掘時間信息,會有不同的方式技巧。

特征選擇

特征選擇主要有兩個功能:

通常來說,從兩個方面考慮來選擇特征

  • 特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
  • 特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。

根據特征選擇的形式又可以將特征選擇方法分為3種:

  • 過濾法(Filter):按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。
  • 包裝法(Wrapper):根據目標函數(通常是預測效果評分),每次選擇若干特征,或者排除若干特征。
  • 嵌入法(Embedded):先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。

降維

數據特征維度太高,首先會導致計算很麻煩,其次增加了問題的復雜程度,分析起來也不方便。但盲目減少數據的特征會損失掉數據包含的關鍵信息,容易產生錯誤的結論,對分析不利。

PCA降維方法,既可以減少需要分析的指標,而且盡可能多的保持了原來數據的信息。

但要注意一點, 特征選擇是從已存在的特征中選取攜帶信息最多的,選完之后的特征依然具有可解釋性,而PCA,將已存在的特征壓縮,降維完畢后不是原來特征的任何一個,也就是PCA降維之后的特征我們根本不知道什么含義了。

建模調參

特征工程也好,數據清洗也罷,都是為最終的模型來服務的,模型的建立和調參決定了最終的結果。模型的選擇決定結果的上限, 如何更好的去達到模型上限取決于模型的調參。

建模的過程需要我們對常見的線性模型、非線性模型有基礎的了解。模型構建完成后,需要掌握一定的模型性能驗證的方法和技巧。同時,還需要掌握貪心調參、網格調參、貝葉斯調參等調參方法。

圖片

回歸分析

回歸分析是一種統計學上分析數據的方法,目的在于了解兩個或多個變量間是否相關、相關方向與強度,并建立數學模型。以便通過觀察特定變量(自變量),來預測研究者感興趣的變量(因變量)

長尾分布

這種分布會使得采樣不準,估值不準,因為尾部占了很大部分。另一方面,尾部的數據少,人們對它的了解就少,那么如果它是有害的,那么它的破壞力就非常大,因為人們對它的預防措施和經驗比較少。

欠擬合過擬合

欠擬合:訓練的模型在訓練集上面的表現很差,在驗證集上面的表現也很差。即訓練誤差和泛化誤差都很大。原因

  • 模型沒有很好或足夠數量的訓練訓練集
  • 模型的訓練特征過于簡單

過擬合:模型的訓練誤差遠小于它在測試數據集上的誤差。即訓練誤差不錯,但是泛化誤差比訓練誤差相差太多。原因

  • 模型沒有很好或足夠數量的訓練訓練集
  • 訓練數據和測試數據有偏差
  • 模型的訓練過度,過于復雜,沒有學到主要的特征

由此引出模型復雜度概念模型中的參數,一個簡單的二元線性的函數只有兩個權重,而多元的復雜的函數的權重可能會什么上百上千個。

圖片

模型復雜度太低(參數過少),模型學習得太少,就難以訓練出有效的模型,便會出現欠擬合。模型復雜度太高(參數很多),即模型可訓練空間很大,容易學習過度,甚至于也將噪聲數據學習了,便會出現過擬合。

正則化

損失函數后面會添加一個額外項,稱作 L1正則化 和 L2正則化,或者 L1范數和 L2范數。

L1正則化和L2正則化可以看做是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數做一些限制。對于線性回歸模型,使用L1正則化的模型建叫做Lasso回歸,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。

正則化說明

  • L1正則化是指權值向量中各個元素的絕對值之和,通常表示為
  • L2正則化是指權值向量中各個元素的平方和然后再求平方根(可以看到Ridge回歸的L2正則化項有平方符號)

正則化作用

調參方法

貪心調參 (坐標下降)坐標下降法是一類優化算法,其最大的優勢在于不用計算待優化的目標函數的梯度。與坐標下降法不同的是,不循環使用各個參數進行調整,而是貪心地選取了對整體模型性能影響最大的參數。參數對整體模型性能的影響力是動態變化的,故每一輪坐標選取的過程中,這種方法在對每個坐標的下降方向進行一次直線搜索(line search)網格調參GridSearchCV作用是在指定的范圍內可以自動調參,只需將參數輸入即可得到最優化的結果和參數。相對于人工調參更省時省力,相對于for循環方法更簡潔靈活,不易出錯。貝葉斯調參貝葉斯優化通過基于目標函數的過去評估結果建立替代函數(概率模型),來找到最小化目標函數的值。貝葉斯方法與隨機或網格搜索的不同之處在于,它在嘗試下一組超參數時,會參考之前的評估結果,因此可以省去很多無用功。

超參數的評估代價很大,因為它要求使用待評估的超參數訓練一遍模型,而許多深度學習模型動則幾個小時幾天才能完成訓練,并評估模型,因此耗費巨大。貝葉斯調參發使用不斷更新的概率模型,通過推斷過去的結果來“集中”有希望的超參數。

這里給出一個模型可調參數及范圍選取的參考:

圖片

模型融合

通過融合多個不同的模型,可能提升機器學習的性能。這一方法在各種機器學習比賽中廣泛應用, 也是在比賽的攻堅時刻沖刺Top的關鍵。而融合模型往往又可以從模型結果,模型自身,樣本集等不同的角度進行融合。

圖片

模型融合是比賽后期一個重要的環節,大體來說有如下的類型方式

1. 簡單加權融合:

  • 回歸(分類概率):算術平均融合(Arithmetic mean),幾何平均融合(Geometric mean);
  • 分類:投票(Voting);
  • 綜合:排序融合(Rank averaging),log融合。

2. stacking/blending:

  • 構建多層模型,并利用預測結果再擬合預測。

3. boosting/bagging:

  • 多樹的提升方法,在xgboost,Adaboost,GBDT中已經用到。

簡單算術平均法

Averaging方法就多個模型預測的結果進行平均。這種方法既可以用于回歸問題,也可以用于對分類問題的概率進行平均。

加權算術平均法

這種方法是平均法的擴展??紤]不同模型的能力不同,對最終結果的貢獻也有差異,需要用權重來表征不同模型的重要性importance。

投票法

假設對于一個二分類問題,有3個基礎模型,現在我們可以在這些基學習器的基礎上得到一個投票的分類器,把票數最多的類作為我們要預測的類別。

    • 硬投票:對多個模型直接進行投票,不區分模型結果的相對重要度,最終投票數最多的類為最終被預測的類。
      • 絕對多數投票法:最終結果必須在投票中占一半以上。
      • 相對多數投票法:最終結果在投票中票數最多。

圖片

  • 軟投票:增加了設置權重的功能,可以為不同模型設置不同權重,進而區別模型不同的重要度。

圖片

堆疊法(Stacking)

stacking 就是當用初始訓練數據學習出若干個基學習器后,將這幾個學習器的預測結果作為新的訓練集,來學習一個新的學習器。對不同模型預測的結果再進行建模。

圖片

混合法(Blending)

Blending采用了和stacking同樣的方法,不過只從訓練集中選擇一個fold的結果,再和原始特征進行concat作為元學習器meta learner的特征,測試集上進行同樣的操作。

把原始的訓練集先分成兩部分,比如70%的數據作為新的訓練集,剩下30%的數據作為測試集。

  • 第一層,我們在這70%的數據上訓練多個模型,然后去預測那30%數據的label,同時也預測test集的label。
  • 在第二層,我們就直接用這30%數據在第一層預測的結果做為新特征繼續訓練,然后用test集第一層預測的label做特征,用第二層訓練的模型做進一步預測。

Bagging

Bagging基于bootstrap(自采樣),也就是有放回的采樣。訓練子集的大小和原始數據集的大小相同。Bagging的技術使用子集來了解整個樣本集的分布,通過bagging采樣的子集的大小要小于原始集合。

  • 采用bootstrap的方法基于原始數據集產生大量的子集
  • 基于這些子集訓練弱模型base model
  • 模型是并行訓練并且相互獨立的
  • 最終的預測結果取決于多個模型的預測結果

Boosting

Boosting是一種串行的工作機制,即個體學習器的訓練存在依賴關系,必須一步一步序列化進行。Boosting是一個序列化的過程,后續模型會矯正之前模型的預測結果。也就是說,之后的模型依賴于之前的模型。

其基本思想是:增加前一個基學習器在訓練訓練過程中預測錯誤樣本的權重,使得后續基學習器更加關注這些打標錯誤的訓練樣本,盡可能糾正這些錯誤,一直向下串行直至產生需要的T個基學習器,Boosting最終對這T個學習器進行加權結合,產生學習器委員會。

下面給出加州大學歐文分校Alex Ihler教授的兩頁PPT:

圖片

圖片

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢