【数据竞赛】“达观杯”文本智能处理挑战赛4
一、邏輯回歸
邏輯回歸(Logistic Regression, LR)是一種常用的處理兩類分類問題的線性模型。
1、概率估計
LR 模型計算輸入特征的加權和(加上偏差項),之后將中間結果輸入 logistic() 函數進行二次加工后輸出。
邏輯回歸模型的概率估計(向量形式)
p^=hθ(x)=σ(θT?x)\hat{p}=h_\theta(x)=\sigma(\theta^T·x)p^?=hθ?(x)=σ(θT?x)
其中,σ()\sigma()σ() 表示 logistic 函數(也稱 logit 函數)
σ(t)=11+e?t\sigma(t)=\frac{1}{1+e^{-t}}σ(t)=1+e?t1?
一旦 logistic 回歸模型估計得到了 XXX 屬于正類的概率 p^=hθ(x)\hat{p}=h_\theta(x)p^?=hθ?(x),則很容易得到預測結果 y^\hat{y}y^?。
邏輯回歸預測模型
y^={0,p^<0.51,p^≥0.5\hat{y}=\begin{cases} 0, \ \ \ \ \hat{p}<0.5\\ 1,\ \ \ \ \hat{p}\geq0.5\end{cases}y^?={0,????p^?<0.51,????p^?≥0.5?
2、訓練和損失函數
注:該部分以手寫筆記為主
邏輯回歸的損失函數(對數損失)
J(θ)=?1m∑i=1m[y(i)log(hθ(xi))+(1?y(i))log(1?hθ(xi))]J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_\theta(x_i))+(1-y^{(i)})log(1-h_\theta(x_i))]J(θ)=?m1?i=1∑m?[y(i)log(hθ?(xi?))+(1?y(i))log(1?hθ?(xi?))]
損失函數關于第 jjj 個模型參數 θj\theta_jθj? 的偏導數
??θjJ(θj)=1m∑i=1m(σ(θT?X(i))?y(i))xj(i)\frac{\partial}{\partial\theta_j}J(\theta_j)=\frac{1}{m}\sum_{i=1}^{m}(\sigma(\theta^T·X^{(i)})-y^{(i)})x_j^{(i)}?θj???J(θj?)=m1?i=1∑m?(σ(θT?X(i))?y(i))xj(i)?
二、Softmax回歸
Logistic回歸擴展到多分類==》Softmax回歸
1、原理
思路:給定實例 xxx 時,Softmax回歸模型先計算 kkk 類的分數 sk(x)s_k(x)sk?(x),然后將分數應用到 Softmax函數,估計出每類的概率。將估計概率最高(它只是得分最高的類)的類別作為預測結果。
softmax函數:估計樣本屬于第 kkk 類的概率 p^k=σ(s(x))k=exp(sk(x))∑j=1Kexp(sj(x))\hat{p}_k=\sigma(s(x))_k=\frac{exp(s_k(x))}{\sum_{j=1}^{K}exp(s_j(x))}p^?k?=σ(s(x))k?=∑j=1K?exp(sj?(x))exp(sk?(x))?
其中:
sk(x)=θkT?xs_k(x)=\theta_k^T·xsk?(x)=θkT??x
其中,KKK 表示類別的個數;需要注意的是 θkθ_kθk? 說明每個類別對應有自己的 θθθ,所有 θkθ_kθk? 組合起來是全部的參數。s(x)s(x)s(x) 表示包含樣本 xxx 每一類得分的向量;σ(s(x))k\sigma(s(x))_kσ(s(x))k?表示給定每一類分數之后,實例 xxx 屬于第 kkk 類的概率。
注意:softmax回歸分類器一次只能預測一個類(智能用于互斥的類別,不能用于多標簽)
2、訓練
目標:建立一個模型在目標類別上有較高的概率。
==》損失函數:交叉熵(衡量待測類別與目標類別的匹配程度)
J(θ)=?1m∑i=1m∑k=1Kyk(i)log(p^k(i))J(\theta)=-\frac{1}{m}\sum_{i=1}^m\sum_{k=1}^Ky_k^{(i)}log(\hat{p}_k^{(i)})J(θ)=?m1?i=1∑m?k=1∑K?yk(i)?log(p^?k(i)?)
若對于第 iii 個實例的目標類是 kkk,那么 yk(i)=1y_k^{(i)}=1yk(i)?=1, 反之 yk(i)=0y_k^{(i)}=0yk(i)?=0。
計算每一類的梯度向量,然后采用梯度下降(或其他優化算法)找到使損失函數達到最小值的參數矩陣 θ\thetaθ。
kkk 類交叉熵關于 θk\theta_kθk? 的梯度向量:
?θkJ(θ)=1m∑i=1m(p^k(i)?yk(i))x(i)\nabla_{\theta_k}J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(\hat{p}_k^{(i)}-y_k^{(i)})x^{(i)}?θk??J(θ)=m1?i=1∑m?(p^?k(i)??yk(i)?)x(i)
三、SVM
自己之前的博文:用Scikit-learn和TensorFlow進行機器學習(五)
四、實現
1、LR
# -*- coding: utf-8 -*- import pickle from sklearn.linear_model.logistic import LogisticRegression from sklearn.svm import LinearSVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_scorefp = open('./features/data_tfidf_train.pkl', 'rb') x_train,y_train = pickle.load(fp) x_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.3, random_state=2019)lr = LogisticRegression(C = 120, dual = True) lr.fit(x_train, y_train) y_predict = lr.predict(x_test) print("Logistic Regression F1 score: ",f1_score(y_test, y_predict, average='micro')輸出結果
2、SVM
svm = LinearSVC(C = 5, dual = False) svm.fit(x_train, y_train) y_predict = svm.predict(x_test) print("SVM F1 Score: ",f1_score(y_test, y_predict, average='micro'))輸出結果
總結
以上是生活随笔為你收集整理的【数据竞赛】“达观杯”文本智能处理挑战赛4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据竞赛】“达观杯”文本智能处理挑战赛
- 下一篇: 集成学习(ensemble learni