監督式學習演算法的效能取決於啟動函式和正規化技術的選擇。啟動函式引入非線性,使模型能學習複雜模式;正規化技術則避免過擬合,提升模型泛化能力。線性迴歸和邏輯迴歸是兩種常見的監督式學習演算法,各有不同的應用場景。線性迴歸用於預測連續值,而邏輯迴歸則用於分類別問題。在實際應用中,需根據資料特性和目標選擇合適的演算法和技術。使用 PySpark 等工具,可以有效地實作和評估這些模型。
監督式學習演算法中的啟動函式與正規化技術
在監督式學習演算法中,啟動函式(Activation Function)扮演著至關重要的角色。它們能夠決定神經網路中的神經元是否被啟動,從而影響整個網路的學習過程與表現。以下將詳細介紹幾種常見的啟動函式及其特性。
線性啟動函式(Linear Activation Function)
線性啟動函式是一種最簡單的啟動函式,它的輸出等於輸入,不進行任何轉換。其數學表示式為:
f(x) = x
其導數 f’(x) = 1。線性啟動函式無法學習非線性資料型別,因為它不能引入非線性變換。
內容解密:
- 線性啟動函式的輸出直接等於輸入,不進行任何非線性轉換。
- 其導數始終為1,這在反向傳播演算法中用於更新權重。
- 線性啟動函式無法處理非線性問題,因為它不引入任何非線性因素。
Sigmoid 啟動函式
Sigmoid 函式將輸入壓縮到 0 和 1 之間,其數學表示式為:
f(x) = 1 / (1 + exp(-x))
其導數為 f’(x) = f(x) * (1 - f(x))。Sigmoid 函式常用於二元分類別問題,可以透過設定閾值(如0.5)將輸出轉換為0或1的二元輸出。
內容解密:
- Sigmoid 函式將任意實數對映到 (0,1) 之間,適合用於二元分類別。
- 其導數可以用於反向傳播演算法中更新權重。
- 可以透過調整閾值來決定分類別結果。
Hyperbolic Tangent (TanH) 函式
TanH 函式將輸入壓縮到 -1 和 1 之間,其數學表示式為:
f(x) = tanh(x) = 2 / (1 + exp(-2x)) - 1
其導數為 f’(x) = 1 - f(x)^2。與 Sigmoid 類別似,TanH 也可以用於二元分類別,但其輸出範圍是 (-1,1)。
內容解密:
- TanH 函式將輸入對映到 (-1,1) 之間,可以用於需要輸出負值的場景。
- 其導數同樣用於反向傳播中的權重更新。
- TanH 的輸出範圍比 Sigmoid 更廣,適合某些特定應用場景。
Rectified Linear Unit (ReLU) 函式
ReLU 函式對於正輸入直接輸出該值,對於負輸入輸出0。其數學表示式為:
f(x) = max(0, x)
其導數為:當 x > 0 時,f’(x) = 1;當 x <= 0 時,f’(x) = 0。ReLU 能夠解決梯度消失問題,使模型學習更快。
內容解密:
- ReLU 將負值對映為0,正值保持不變,這使得神經網路能夠學習更複雜的模式。
- ReLU 的導數對於正值為1,對於負值為0,這有助於反向傳播中的梯度計算。
- ReLU 可能會遇到「死亡 ReLU」問題,即某些神經元永遠不會被啟動。
Leaky ReLU 或 Parametric ReLU 函式
Leaky ReLU 是 ReLU 的變體,它對於負輸入輸出一個小的非零值(αx),而不是0。其數學表示式為:
f(x) = x if x >= 0, αx if x < 0
其導數為:當 x > 0 時,f’(x) = 1;當 x <= 0 時,f’(x) = α。Leaky ReLU 能夠減少「死亡 ReLU」的問題。
內容解密:
- Leaky ReLU 對負輸入給予一個小的梯度,避免了神經元完全不被啟動的問題。
- α 是 Leaky ReLU 中的超引數,可以根據具體任務進行調整。
- Leaky ReLU 有助於保持神經網路的活躍性和學習能力。
Swish 啟動函式
Swish 是 Google 在2017年提出的一種新型啟動函式,其數學表示式為:
f(x) = x * sigmoid(x)
其導數涉及 Swish 函式本身和 Sigmoid 函式。研究表明,Swish 在某些模型(如 ImageNet 和 Inception-ResNet-v2)上比 ReLU 有更好的表現。
內容解密:
- Swish 結合了線性項和 Sigmoid 非線性項,能夠在某些情況下提高模型的準確度。
- Swish 的導數較為複雜,涉及 Swish 函式和 Sigmoid 函式的計算。
- Swish 在深度學習模型中表現出色,尤其是在影像分類別任務中。
Softmax 函式
Softmax 主要用於多類別分類別問題,其數學表示式為:
f(x_i) = exp(x_i) / Σ_j exp(x_j)
Softmax 將輸入轉換為機率分佈,使得每個類別的機率和為1。
內容解密:
- Softmax 將多個類別的輸出轉換為機率形式,便於進行多類別分類別。
- Softmax 的輸出代表每個類別的預測機率,可以用來選擇最可能的類別。
- 在多類別分類別問題中,Softmax 是常用的輸出層啟動函式。
批次正規化(Batch Normalization)
批次正規化是一種正規化技術,透過對每個批次的輸入進行標準化,使得模型的訓練更加穩定,加速收斂。
圖表翻譯:
此技術能夠減少內部共變數偏移,使神經網路訓練更穩定。
Dropout
Dropout 是另一種正規化技術,透過在訓練過程中隨機丟棄部分神經元的輸出,以避免過擬合和引入偏差。
圖表翻譯:
Dropout 能夠防止模型過度依賴某些特定的輸入特徵,從而提高模型的泛化能力。
監督式機器學習演算法詳解:以線性迴歸為例
在機器學習的領域中,監督式學習是一項重要的技術,而線性迴歸又是其中最基礎且廣泛使用的演算法之一。本篇文章將探討線性迴歸的原理、實作以及解讀方法,並使用 PySpark 進行實際操作。
線性迴歸簡介
線性迴歸是一種用於預測連續結果的演算法,例如房屋價格或客戶的終身價值。該演算法假設輸入變數與輸出結果之間存線上性關係。當使用一個輸入變數來預測輸出時,稱為簡單線性迴歸;當使用多個輸入變數時,則稱為多元線性迴歸。
簡單線性迴歸與多元線性迴歸
簡單線性迴歸模型可以表示為: [ y = \beta_0 + \beta_1 x + \epsilon ] 其中,( y ) 是目標變數,( x ) 是輸入變數,( \beta_0 ) 是截距,( \beta_1 ) 是斜率,( \epsilon ) 是誤差項。
多元線性迴歸模型則可以表示為: [ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon ] 其中,( x_1, x_2, \cdots, x_n ) 是多個輸入變數,( \beta_1, \beta_2, \cdots, \beta_n ) 分別是對應的係數。
使用 PySpark 實作線性迴歸
首先,我們需要準備資料集並進行特徵向量組裝。以下是使用 PySpark 進行資料處理和模型訓練的程式碼範例:
# 載入必要的函式庫
from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.regression import LinearRegression
# 建立 SparkSession
spark = SparkSession.builder.getOrCreate()
# 載入資料集
filename = "bank-full.csv"
data = spark.read.csv(filename, header=True, inferSchema=True, sep=';')
# 組裝特徵向量
def assemble_vectors(df, features_list, target_variable_name):
assembler = VectorAssembler(inputCols=features_list, outputCol='features')
stages = [assembler]
selectedCols = [target_variable_name, 'features'] + features_list
pipeline = Pipeline(stages=stages)
assembleModel = pipeline.fit(df)
df = assembleModel.transform(df).select(selectedCols)
return df
# 選擇變數並組裝特徵向量
linear_df = data.select(['age', 'balance', 'day', 'duration', 'campaign', 'pdays', 'previous'])
target_variable_name = 'balance'
features_list = linear_df.columns
features_list.remove(target_variable_name)
df = assemble_vectors(linear_df, features_list, target_variable_name)
# 訓練線性迴歸模型
reg = LinearRegression(featuresCol='features', labelCol='balance')
reg_model = reg.fit(df)
# 檢視係數和截距
print(reg_model.coefficients, reg_model.intercept)
# 進行預測
pred_result = reg_model.transform(df)
內容解密:
- 資料載入與處理:首先,我們使用
SparkSession載入資料集,並選擇相關的欄位進行分析。 - 特徵向量組裝:使用
VectorAssembler將多個輸入變陣列裝成一個特徵向量,以便於輸入到線性迴歸模型中。 - 模型訓練:使用
LinearRegression類別訓練線性迴歸模型,並檢視模型的係數和截距。 - 模型預測:使用訓練好的模型對資料進行預測。
線性迴歸模型的解讀
線性迴歸模型的方程式可以表示為: [ Predicted_balance = 124.92 + 28.08 \times age + 3.30 \times day + 0.25 \times duration - 14.14 \times campaign - 0.08 \times pdays + 23.46 \times previous ]
多重共線性問題
在解讀線性迴歸模型時,需要注意多重共線性(Multicollinearity)的問題。當兩個或多個輸入變數之間存在高度相關性時,會導致模型的解釋性降低。可以使用 Variance Inflation Factor(VIF)來檢測多重共線性。
# 計算 VIF 的函式
def vif_calculator(df, features_list):
vif_list = []
for i in features_list:
# 此處省略具體實作細節
pass
內容解密:
- VIF 計算:VIF 用於評估多重共線性的程度。當 VIF 值大於 10 時,表示存在嚴重的多重共線性問題。
- 模型解釋:透過檢視模型的係數,可以瞭解各個輸入變數對目標變數的影響。例如,年齡(age)每增加 1 歲,預測的餘額(balance)會增加約 28 個單位。
邏輯迴歸(Logistic Regression)與多重共線性(Multicollinearity)問題
多重共線性(Multicollinearity)問題的處理
在進行迴歸分析時,變數之間的相關性可能會對模型造成影響。其中,多重共線性是指兩個或多個自變數之間存在高度相關性的情況,這會導致模型引數估計不穩定,進而影響模型的預測能力。
方差膨脹因子(Variance Inflation Factor, VIF)
為瞭解決多重共線性問題,我們可以使用方差膨脹因子(VIF)來評估自變數之間的相關性。VIF 的計算公式如下:
def vif_calculator(df, features_list):
vif_list = []
for i in features_list:
temp_features_list = features_list.copy()
temp_features_list.remove(i)
temp_target = i
assembler = VectorAssembler(inputCols=temp_features_list, outputCol='features')
temp_df = assembler.transform(df)
reg = LinearRegression(featuresCol='features', labelCol=i)
reg_model = reg.fit(temp_df) # fit model
temp_vif = 1 / (1 - reg_model.summary.r2)
vif_list.append(temp_vif)
return vif_list
features_df['vif'] = vif_calculator(linear_df, features_list)
print(features_df)
內容解密:
vif_calculator函式:此函式計算每個特徵的 VIF 值。它遍歷每個特徵,將當前特徵作為目標變數,其他特徵作為輸入變數,使用線性迴歸模型進行擬合,並計算 VIF 值。VectorAssembler:用於將多個特徵列組合為一個向量列,作為線性迴歸模型的輸入。LinearRegression:線性迴歸模型,用於擬合資料並計算 R-squared 值。VIF 計算:根據線性迴歸模型的 R-squared 值計算 VIF,公式為1 / (1 - R-squared)。- 結果輸出:將計算出的 VIF 值新增到
features_df資料框中,並列印預出來。
邏輯迴歸(Logistic Regression)
邏輯迴歸是一種用於二元分類別問題的演算法,用於預測事件發生的機率。它透過擬合一條最佳曲線來區分二元結果。
邏輯迴歸方程
邏輯迴歸的方程與線性迴歸不同,其左側是對數機率(log(odds)):
[ log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1x_1 + \beta_2x_2 + \ldots + \beta_nx_n ]
最大似然估計(Maximum Likelihood Estimation, MLE)
邏輯迴歸使用最大似然估計來確定最佳擬合曲線。MLE 的過程包括:
- 選擇候選曲線:選擇一條候選曲線,並將資料點投影到該曲線上,得到對數機率值。
- 轉換為機率:使用 sigmoid 函式將對數機率轉換為機率。
- 計算 MLE:根據真實標籤和預測機率計算似然值,並取對數得到對數似然值。
- 迭代最佳化:重複調整曲線引數,最大化對數似然值,直到找到最佳擬合曲線。
PySpark 程式碼實作
# 從 bank 資料集中選擇特徵和目標變數
# 假設 'y' 是目標變數,其他列是特徵
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import LogisticRegression
# 組合特徵
assembler = VectorAssembler(inputCols=['age', 'balance', 'day', 'duration', 'campaign', 'pdays', 'previous'], outputCol='features')
bank_df = assembler.transform(bank_df)
# 訓練邏輯迴歸模型
lr = LogisticRegression(featuresCol='features', labelCol='y')
lr_model = lr.fit(bank_df)
# 檢視模型摘要
print(lr_model.summary)
內容解密:
VectorAssembler:將多個特徵列組合為一個向量列,作為邏輯迴歸模型的輸入。LogisticRegression:邏輯迴歸模型,用於二元分類別問題。fit方法:訓練邏輯迴歸模型,使用提供的資料。summary屬性:檢視模型的摘要資訊,包括訓練統計資料等。
二元分類別與多類別分類別
邏輯迴歸可以應用於二元分類別和多類別分類別問題。在二元分類別中,使用 sigmoid 函式;在多類別分類別中,使用 softmax 函式。
Sigmoid 與 Softmax 的關係
- Sigmoid 函式:用於二元分類別,將對數機率轉換為機率。
- Softmax 函式:用於多類別分類別,將多個類別的對數機率轉換為機率分佈。
在 PySpark 中,可以透過設定 family 引數來選擇二元或多項式邏輯迴歸。
邏輯迴歸模型與決策樹在信用評估中的應用
在信用評估領域,邏輯迴歸模型與決策樹是兩種常見的機器學習方法,用於預測客戶的信用風險。本篇文章將探討這兩種方法的原理、實作和解釋。
邏輯迴歸模型
邏輯迴歸是一種廣泛使用的分類別演算法,特別是在二元分類別問題中。它透過計算事件發生的機率(即 odds)來進行預測。邏輯迴歸模型的輸出是一個介於 0 和 1 之間的機率值,可以用來預測客戶是否會違約。
邏輯迴歸模型的實作
from pyspark.ml.classification import LogisticRegression
# 建立邏輯迴歸模型
binary_clf = LogisticRegression(featuresCol='features', labelCol='y', family='binomial')
multinomial_clf = LogisticRegression(featuresCol='features', labelCol='y', family='multinomial')
# 訓練模型
binary_clf_model = binary_clf.fit(df)
multinomial_clf_model = multinomial_clf.fit(df)
# 列印模型係數
print(binary_clf_model.coefficients)
print(multinomial_clf_model.coefficientMatrix)
# 列印模型截距
print(binary_clf_model.intercept)
print(multinomial_clf_model.interceptVector)
邏輯迴歸模型的解釋
邏輯迴歸模型的係數代表了自變數對目標變數的影響程度。對於二元變數,可以透過計算 odds ratio 來解釋係數的大小。
內容解密:
binary_clf和multinomial_clf分別代表二元邏輯迴歸和多項邏輯迴歸模型。featuresCol='features'表示模型的輸入特徵。labelCol='y'表示模型的目標變數。family='binomial'和family='multinomial'分別指定二元和多項邏輯迴歸。- 模型的係數和截距可以用來計算預測機率。
變數解釋
在邏輯迴歸模型中,變數的解釋可以透過計算 odds ratio 來進行。
二元變數解釋
對於二元變數,可以透過計算 odds ratio 來解釋其對目標變數的影響。
log(odds class 1|Female) - log(odds class 1|Male) = 0.16
odds class Female / odds class Male = e^0.16 = 1.173
內容解密:
- 當性別從男性變為女性時,odds ratio 增加 17%。
- 這意味著女性被分類別為 class 1 的機率比男性高 17%。
連續變數解釋
對於連續變數,可以透過計算單位變化對 odds ratio 的影響來進行解釋。
log(odds class 1|Age = 30) - log(odds class 1|Age = 29) = -0.32
odds class Age=30 / odds class Age=29 = e^-0.32 = 0.73
內容解密:
- 當年齡增加一歲時,odds ratio 減少 27%。
- 這意味著隨著年齡的增加,被分類別為 class 1 的機率會降低。
決策樹
決策樹是一種非線性的分類別演算法,透過遞迴地分割資料來進行預測。決策樹的優點在於可以處理非線性的關係,並且容易解釋。
決策樹的解釋
決策樹的根節點代表最重要的特徵,葉節點代表最終的預測結果。
* 根節點:年齡
* 葉節點:最終預測結果(批准或不批准)
圖表翻譯:
此圖示展示了一個簡單的信用評估決策樹。年齡是根節點,根據年齡的不同取值,會進一步根據其他特徵(如職業和信用評分)進行判斷,最終得出是否批准的結論。