Python數據分析與挖掘強化篇1——數據挖掘與分析中的挖掘與建模(決策樹、迴歸分析、人工神經網絡)附實例!

閱讀提示

本文將進入數據挖掘與分析中較爲困難的一部分———建模分析,將提到簡單的分類預測實現方式,例如迴歸分析、決策樹、人工神經網絡等等。

第五章 挖掘建模

一、分類與預測

就餐飲企業而言,經常會碰到如下問題。

  1. 如何基於菜品歷史銷售情況,以及節假日、氣候和競爭對手等影響因素,對菜品銷量進行趨勢預測?
  2. 如何預測未來一段時間哪些顧客會流失,哪些顧客最有可能會成爲VIP客戶?
  3. 如何預測一種新產品的銷售量,以及在哪種類型的客戶中會較受歡迎?

​    除此之外,餐廳經理需要通過數據分析來幫助他了解具有某些特徵的顧客的消費習慣;餐飲企業老闆希望知道下個月的銷售收入,原材料採購需要投入多少,這些都是分類與預測的例子。分類和預測是預測問題的兩種主要類型,分類主要是預測分類標號(離散屬性),而預測主要是建立連續值函數模型,預測給定自變量對應的因變量的值。

1、實現過程

1)分類

​    分類是構造一個分類模型,輸人樣本的屬性值,輸出對應的類別,將每個樣本映射到預先定義好的類別。
​    分類模型建立在已有類標記的數據集上,模型在已有樣本上的準確率可以方便地計算,所以分類屬於有監督的學習。下圖是一個將銷售量分爲高、中、低三分類問題。

(2)預測

​    預測是指建立兩種或兩種以上變量相互依賴的函數模型,然後進行預測或控制。

(3)實現過程

分類算法有兩步過程:

  • 第一步是學習步,通過歸納分析訓練樣本集來建立分類模型得到分類規則
  • 第二步是分類步,先用已知的測試樣本集評估分類規則的準確率,如果準確率是可以接受的,則使用該模型對未知類標號的待測樣本集進行預測。

預測模型的實現也有兩步:

  • 第一步是通過訓練集建立預測屬性(數值型的)的函數模型
  • 第二步在模型通過檢驗後進行預測或控制

2、常見的分類與預測算法

算法名稱 算法描述
迴歸分析 迴歸分析是確定預測屬性(數值型)與其他變量間相互依賴的定量關係最常用的統計學方法。包括線性迴歸、非線性迴歸、Logistic 迴歸、嶺迴歸、主成分迴歸、偏最小二乘迴歸等模型
決策樹 決策樹採用自頂向下的遞歸方式,在內部節點進行屬性值的比較,並根據不同的屬性值從該節點向下分支,最終得到的葉節點是學習劃分的類
人工神經網絡 人工神經網絡是一種模仿大腦神經網絡結構和功能而建立的信息處理系統,表示神經網絡的輸人與輸出變量之間關係的模型
貝葉斯網絡 貝葉斯網絡又稱信度網絡,是Bayes方法的擴展,是目前不確定知識表達和推理領域最有效的理論模型之一
支持向量機 支持向量機是一種通過某種非線性映射,把低維的非線性可分轉化爲高維的線性可分,在高維空間進行線性分析的算法

3、迴歸分析

   迴歸分析是通過建立模型來研究變量之間相互關係的密切程度、結構狀態及進行模型預測的一種有效工具,在工商管理、經濟、社會、醫學和生物學等領域應用十分廣泛。從19世紀初高斯提出最小二乘估計起,迴歸分析的歷史已有200多年。從經典的迴歸分析方法到近代的迴歸分析方法,按照研究方法劃分,迴歸分析研究的範圍大致如下。

​    在數據挖掘環境下,自變量與因變量具有相關關係,自變量的值是已知的,因變量是要預測的。

主要的迴歸模型分類:

迴歸模型名稱 適用條件 算法描述
線性迴歸 因變量與自變量是線性關係 對一個或多個自變量和因變量之間的線性關係進行建模,可用最小二乘法求解模型係數
非線性迴歸 因變量與自變量之間不都是線性關係 對一個或多個自變量和因變量之間的非線性關係進行建模。如果非線性關係可以通過簡單的函數變換轉化成線性關係,用線性迴歸的思想求解;如果不能轉化,用非線性最小二乘方法求解
Logistic迴歸 因變量一般有1和0(是否)兩種數值 是廣義線性迴歸模型的特例,利用Logistic函數將因變量的取值範圍控制在0和1之間,表示取值爲1的概率
嶺迴歸 參與建模的自變量之間具有多重共線性 是一種改進的最小二乘估計的方法
主成分分析 參與建模的自變量之間具有多重共線性 主成分迴歸是根據主成分分析的思想提出來的,是對最小二乘法的一種改進,它是參數估計的一種有偏估計。可以消除自變量之間的多重共線性

​    線性迴歸模型是相對簡單的迴歸模型,但是通常因變量和自變量之間呈現某種曲線關係,就需要建立非線性迴歸模型。

​    Logistic迴歸屬於概率型非線性迴歸,分爲二分類和多分類的迴歸模型。對於二分類的Logistic迴歸,因變量y只有“是、否”兩個取值,記爲1和0。假設在自變量x1,x2… ,xp作用下,y取“是”的概率是p,則取“否”的概率是1-p, 研究的是當y取“是”發生的概率p與自變量x1, x2… ,xp的關係。

​    當自變量之間出現多重共線性時,用最小二乘估計的迴歸係數將會不準確,消除多重共線性的參數改進的估計方法主要有嶺迴歸和主成分迴歸。下面就較常用的二分類Logistic迴歸模型的原理進行介紹。

(1)Logistic迴歸分析介紹

a、Logistic函數

Logistic迴歸模型中的因變量只有1和0(發生於不發生)兩種。假設在p個獨立自變量x1,x2…xp作用下,y取1的概率是p = P(y = 1|X)取0的概率是1-p,取1和取0的概率之比爲
p1p \frac{p}{1-p}
稱爲事件的優勢比(odds),對odds取自然對數得Logistic變換
Logit(p)=ln(p1p) Logit(p) = ln(\frac{p}{1-p}) 稱爲①
令①=z,則
p=11+ez p = \frac{1}{1+e^{z}}
稱爲Logistic函數

如圖:

(2)Logistic迴歸建模步驟

a、根據分析目的設置指標變量(因變量和自變量),然後收集數據,根據收集到的數據,對特徵再次進行篩選

b、y取1的概率是p= P(y= 1|X), 取0概率是1-p。用
ln(p1p) ln(\frac{p}{1-p})
和自變量列出線性迴歸方程,估計出模型中的迴歸係數
c、進行模型檢驗。模型有效性的檢驗指標有很多,最基本的有正確率,其次有混淆矩陣、ROC曲線、KS值等。

d、模型應用:輸入自變量的取值,就可以得到預測變量的值,或者根據預測變量的值去控制自變量的取值。

實例:

年齡 教育 工齡 地址 收入 負債率 信用卡負債 其他負債 違約
41 3 17 12 176.00 9.30 11.36 5.01 1
27 1 10 6 31.00 17.30 1.36 4.00 0

需要數據集請私聊我

​    利用Scikit-Learn對這個數據進行邏輯迴歸分析。首先進行特徵篩選,特徵篩選的方法有很多,主要包含在Scikit_Learn 的feature_ selection 庫中,比較簡單的有通過F檢驗(f_ regression)來給出各個特徵的F值和p值,從而可以篩選變量(選擇F值大的或者p值小的特徵)。其次有遞歸特徵消除( Recursive Feature Elimination, RFE)穩定性選擇(StabilitySelection)等比較新的方法。這裏使用了穩定性選擇方法中的隨機邏輯迴歸進行特徵篩選,然後利用篩選後的特徵建立邏輯迴歸模型,輸出平均正確率。

邏輯迴歸代碼

# -*- coding: utf-8 -*-
# 邏輯迴歸 自動建模
import pandas as pd

# 參數初始化
filename = '../data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:, :8].as_matrix()
y = data.iloc[:, 8].as_matrix()

from sklearn.linear_model import LogisticRegression as LR
from stability_selection.randomized_lasso import RandomizedLogisticRegression as RLR

rlr = RLR()  # 建立隨機邏輯迴歸模型,篩選變量
rlr.fit(x, y)  # 訓練模型
rlr.get_support()  # 獲取特徵篩選結果,也可以通過.scores_方法獲取各個特徵的分數
print(u'通過隨機邏輯迴歸模型篩選特徵結束。')
print(u'有效特徵爲:%s' % ','.join(data.columns[rlr.get_support()]))
x = data[data.columns[rlr.get_support()]].as_matrix()  # 篩選好特徵

lr = LR()  # 建立邏輯貨櫃模型
lr.fit(x, y)  # 用篩選後的特徵數據來訓練模型
print(u'邏輯迴歸模型訓練結束。')
print(u'模型的平均正確率爲:%s' % lr.score(x, y))  # 給出模型的平均正確率,本例爲81.4%

結果:

通過隨機邏輯迴歸模型篩選特徵結束。
有效特徵爲:工齡,地址,負債率,信用卡負債
邏輯迴歸模型訓練結束。
魔性的平均正確率爲:0.814285714286

4、決策樹

​    決策樹是一樹狀結構,它的每一個葉節點對應着一個分類,非葉節點對應着在某個屬性上的劃分,根據樣本在該屬性上的不同取值將其劃分成若干個子集。對於非純的葉節點,多數類的標號給出到達這個節點的樣本所屬的類。構造決策樹的核心問題是在每一步如何選擇適當的屬性對樣本做拆分。對一個分類問題,從已知類標記的訓練樣本中學習並構造出決策樹是一個自上而下,分而治之的過程。

常見的決策樹算法表:

決策樹算法 算法描述
ID3算法 其核心是在決策樹的各級節點上,使用信息增益方法作爲屬性的選擇標準,來幫助確定生成每個節點時所應採用的合適屬性
C4.5算法 C4.5決策樹生成算法相對於ID3算法的重要改進是使用信息增益率來選擇節點屬性。C4.5算法可以克服ID3算法存在的不足: ID3算法只適用於離散的描述屬性,而C4.5算法既能夠處理離散的描述屬性,也可以處理連續的描述屬性
CART算法 CART決策樹是-一種十分有效的非參數分類和迴歸方法,通過構建樹、修剪樹、評估樹來構建一個二叉樹。當終結點是連續變量時,該樹爲迴歸樹;當終結點是分類變量,該樹爲分類樹

5、人工神經網絡

算法名稱 算法描述
BP神經網絡 是一種按誤差逆傳播算法訓練的多層前饋網絡,學習算法是δ學習規則,是目前應用最廣泛的神經網絡模型之一
LM神經網絡 是基於梯度下降法和牛頓法結合的多層前饋網絡,特點:迭代次數少,收斂速度快,精確度高
RBF徑向基神經網絡 RBF網絡能夠以任意精度逼近任意連續函數,從輸人層到隱含層的變換是非線性的,而從含層到輸出層的變換是線性的,特別適合於解決分類問題
FNN模糊神經網絡 FNN模糊神經網絡是具有模糊權係數或者輸人信號是模糊量的神經網絡,是模糊系統與神經網絡相結合的產物,它匯聚了神經網絡與模糊系統的優點,集聯想、識別、自適應及模糊信息處理於一體
GMDH神經網絡 GMDH網絡也稱爲多項式網絡,它是前饋神經網絡中常用的一-種用於預測的神經網絡。它的特點是網絡結構不固定,而且在訓練過程中不斷改變
ANFIS自適應神經網絡 神經網絡鑲嵌在一- 個全部模糊的結構之中,在不知不覺中向訓練數據學習,自動產生、修正並高度概括出最佳的輸人與輸出變量的隸屬函數以及模糊規則;另外,神經網絡的各層結構與參數也都具有了明確的、易於理解的物理意義

反向傳播( Back Propagation, BP) 算法的特徵是利用輸出後的誤差來估計輸出層的直接前導層的誤差,再用這個誤差估計更前一層的誤差,如此一層一層的反向傳播下去,就獲得了所有其他各層的誤差估計。這樣就形成了將輸出層表現出的誤差沿着與輸入傳送相反的方向逐級向網絡的輸入層傳遞的過程。這裏我們以典型的三層BP網絡爲例,描述標準的BP算法。

下圖是一個有3個輸入節點,4個隱層節點,1個輸出節點的一個三層BP神經網絡。

BP算法學習過程流程圖:

​    BP算法只用到均方誤差函數對權值和國值的一.階導數 (梯度)的信息,使得算法存在收斂速度緩慢、易陷入局部極小等缺陷。爲了解決這一問題,Hinton 等人於2006年提出了非監督貪心逐層訓練算法,爲解決深層結構相關的優化難題帶來希望,並以此爲基礎發展成瞭如今膾炙人口的“深度學習”算法。本文中所建立的神經網絡,結構跟傳統的BP神經網絡是類似的,但是求解算法已經用了新的逐層訓練算法。限於篇幅,本文不對深度學習做進一步的講解。有興趣的讀者,請自行搜索並閱讀相關資料。

6、Python分類預測模型特點

模型 模型特點 位於
比較基礎的線性分類模型,很多時候是簡單有效的的選擇 sklearn.linner_model
SVM 強大的模型,可以用來回歸、預測、分類等,而根據選取不同的核函數。模型可以是線性的/非線性的 sklearn.svm
決策樹 基於“分類討論、逐步細化"思想的分類模型,模型直觀,易解釋,如前面5.1.4節中可以直接給出決策圖 sklearn.tree
隨機森林 思想跟決策樹類似,精度通常比決策樹要高,缺點是由於其隨機性,喪失了決策樹的可解釋性 sklearn.ensemble
樸素貝葉斯 基於概率思想的簡單有效的分類模型,能夠給出容易理解的概率解釋 sklearn.naive_bayes
神經網絡 具有強大的擬合能力,可以用於擬合、分類等,它有很多個增強版本,如遞神經網絡、卷積神經網絡、自編碼器等,這些是深度學習的模型基礎 Keras

​    Scikit-Learn和Keras的功能都非常強大,我們能夠做的僅僅是通過一些簡單的例子介紹它們的基本功能,這僅僅是它們本身功能的冰山一角。因此,再次強調,如果遇到沒有講解過的問題,應當儘可能地查閱官方的幫助文檔。只有官方的幫助文章,纔有可能全面地提供解決問題的答案。


★學習Python數據挖掘純屬個人愛好,如有不足或錯誤請指出謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章