逻辑回归-分类算法
目錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯回歸-分類算法
1 概述
2?sigmoid函數
3 邏輯回歸公式
4 邏輯回歸的損失函數
5 均方誤差與對數自然損失對比
6?sklearn邏輯回歸API
7 案例
8 總結
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯回歸-分類算法
1 概述
邏輯回歸(Logistic Regression),簡稱LR。它的特點是能夠是我們的特征輸入集合轉化為0和1這兩類的概率。一般來說,回歸不用在分類問題上,因為回歸是連續型模型,而且受噪聲影響比較大。如果非要應用進入,可以使用邏輯回歸。
邏輯回歸只能解決二分類問題,并且邏輯回歸非常擅長解決二分類問題,因為任何二分類場景都能得出概率。
邏輯回歸的輸入和線性回歸的輸入是一摸一樣的,所以線性回歸會出現的問題邏輯回歸也會出現,比如過擬合。邏輯回歸的核心:線性回歸的輸入到問題分類,那就是sigmoid函數
2?sigmoid函數
該函數的特點:橫坐標是輸入的值,這些值經過函數映射后得到某個值,這些值的特點就是0-1之間,也就是說sigmoid能將你的輸入轉換為一個0-1的值,交叉點為0.5
因為概率值就是0-1之間的,所以sigmoid就能將邏輯回歸的輸入轉換為一個概率值。
3 邏輯回歸公式
e為一個常數2.71? ? ? ? ? ? z就是邏輯回歸的結果
輸出:[0,1]區間的概率值,默認0.5作為閥值? ? ? ? ? ? ? ? ? ? ? ? ?注:g(z)為sigmoid函數
因為邏輯回歸也有權重,也需要去迭代更新,那就應該也要有策略(損失函數)和優化的過程
4 邏輯回歸的損失函數
與線性回歸原理相同,但由于是分類問題, 損失函數不一樣,只能通過梯度下降求解
對數似然損失函數:
注意:邏輯回歸是選擇某一個類別作為目標作為目標判斷的概率(注意:哪一個類別少,判定概率值是指這個類別)。假設有A,B兩種類型需要判斷,邏輯回歸只做一件事情就是判斷屬于A的概率是多少不判斷屬于B的概率(或者判斷屬于B的概率是多少那就不判斷屬于A的概率),當所有樣本來了,只判斷屬于A的概率是多少,如果是1就是A了,如果概率是0.1,閾值是0.5,那就屬于B類。
當目標值為1的時候,如果判斷的是屬于1的概率,如果說屬于1的概率越來越大,目標值是1那損失越來越小。如果判斷屬于1的概率越來越小,那么損失越來越大
當目標值為0的時候,如果判斷的是屬于1的概率,如果說屬于1的概率越來越大,目標值是0那損失越來越大。如果判斷屬于1的概率越來越小,那么損失越來越小
完整的損失函數:
cost損失的值越小,那么預測的類別準確度更高
假設有四個樣本,[樣本1,樣本2,樣本3,樣本4],對應的目標值為[1,0,0,1]
假設邏輯回歸的預測值為[0.6,0.1,0.51,0.7],閾值為0.5,那么預測的目標值就位[1,0,1,1]。我們可以看出這個結果是錯的,但是,算法是通過損失函數去衡量,那就要建立一個損失函數。就是根據損失函數公式,得知每個樣本都有損失值,那么就是1*log(0.6)+0*log(0.1)+0*log(0.51)+1*log(0.7)。
?
5 均方誤差與對數自然損失對比
均方誤差和對數自然損失的優化都可以通過梯度下降,損失函數的最低點,但是均方誤差,有一個最低點,自然對數損失有很多個最低點
均方誤差:是不存在局部最低點的,只有一個最小值
對數自然損失:多個局部最小值,是沒有全局最低點,如下圖,目前也是沒有解決全局最低點的方法,只能通過兩個方法區盡量改善,使其趨近于全局最低點。①多個值隨機初始化,讓他們分別找各自的最低點,比較他們每個的最低點,②在整個求解的過程中,調整學習率。
盡管沒有最低點,但是通過這兩個方法改善效果還是不錯的。
?
6?sklearn邏輯回歸API
sklearn.linear_model.LogisticRegression
sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)
penalty=‘l2’:L2正則化? ? ? ? ? ? ? ? ? ? ? C:正則化力度
Logistic回歸分類器? ? ? ? ? ? ? ? ? ?coef_:回歸系數
?
7 案例
良/惡性乳腺癌腫瘤預測
原始數據的下載地址: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/
數據描述:
主要信息:①699條樣本,共11列數據,第一列用語檢索的id,后9列分別是與腫瘤 相關的醫學特征,最后一列表示腫瘤類型的數值。2表示良性,4表示惡性?②包含16個缺失值,用”?”標出。
哪一個類別少,判定概率值是指這個類別,因為惡性少,所以判定惡性為正例,此時良性就是反例。假如良性比較少,那就判定良性為正例,惡性為反例
注意:①數據樣本如上,因為第一個行沒有指定特征值的名字是什么,如果pd去讀取他的時候沒有默認給定每一列的名字,那么會默認把第一行當做列表名,所以讀取的時候要指定列名
②因為缺失值為?,所以需要修改為np.NaN
實現步驟:①網上獲取數據(工具pandas) ②數據缺失值處理、標準化(回歸都是需要標準化的) ③LogisticRegression估計器流程
pandas使用:
pd.read_csv(’’,names=column_names)
column_names:指定類別名字
return:數據
replace(to_replace=’’,value=):返回數據
dropna():返回數據
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report# 構造列標簽名字 column = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class'] # 讀取數據 data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",names=column) print(data)# 缺失值處理,將?替換 data = data.replace(to_replace='?',value=np.nan) # 刪除缺失值,使用dropna,把有缺失值的整行刪除 data = data.dropna()# 將數據切分分訓練集合測試集,切片是的索引是從0開始的 x_train,x_test,y_train,y_test = train_test_split(data[column[1:10]],data[column[10]],test_size=0.25)# 特征值標準化處理,因為是分類問題,所以目標值不用標準化 std = StandardScaler() x_train = std.fit_transform(x_train) x_test = std.transform(x_test)# 邏輯回歸預測 # 有默認值penalty='l2', dual=False, tol=1e-4, C=1.0, log = LogisticRegression() log.fit(x_train,y_train) print("權重為",log.coef_)# 預測測試集的目標值 y_predict = log.predict(x_test)# target_names指定目標分類,labels對應目標分類,指定4為惡性,2位良性 print("召回率為",classification_report(y_test,y_predict,labels=[4,2],target_names=["惡性","良性"]))8 總結
應用:廣告點擊率預測、電商購物搭配推薦
優點:適合需要得到一個分類概率的場景
缺點:當特征空間很大時(多分類),邏輯回歸的性能不是很好 (看硬件能力)
二分類問題首先想到用邏輯回歸問題做。
判別模型與生成模型的區分:是否有先驗概率,有先驗概率的為生成模型,沒有的為判別模型。先驗概率就是說是否需要從歷史數據中總結出一些概率信息。如樸素貝葉斯求本文概率的時候要先求某個文章的,某個類別下某個詞的概率P(f1,f2..|c)P(c),求這些就提前需要在數據中獲取這些東西,P(c)就是先驗概率,要先求每個類型的概率是多少。現在某個文章過來了,要判斷這個文章類別就要判斷在歷史數據上面他是怎樣的一個概率情況
常見的判別模型:k-近鄰,決策樹,隨機森林,神經網絡
常見生成模型:樸素貝葉斯,隱馬爾可夫模型
樸素貝葉斯和邏輯回歸的比較:
| ? | 邏輯回歸 | 樸素貝葉斯 |
| 解決問題 | 二分類 | 多分類 |
| 應用場景 | 癌癥預測,二分類需要概率 | 文本分類 |
| 參數 | 正則化力度 | 沒有 |
| 模型 | 判別模型 | 生成模型 |
| 相同點 | 得出的結果都有概率解釋 | |
?
總結
- 上一篇: Java随机生成长宽的矩形_java –
- 下一篇: delphi64位 char数组转换st