邏輯回歸說的是數(shù)據(jù)的分類,估計的是一個離散值
線性回歸用來估計某個連續(xù)值,如果用線性回歸來歸類,預(yù)測值是0.1 0.2 而不是1 和 0。
根據(jù):
如果我們可以計算屬于每個類的觀察概率,我們可以將它分配給具有最高概率的類。
我們需要一個函數(shù)可以將 feature 的 Series 作為輸入?,返回概率值域為[0,1]
Logit函數(shù)
比值比(odds ratio) ,它可以被寫成 ? ,其中的 ? 代表正事件(positive event)的概率.
正事件代表我們想要預(yù)測的事件。比如:病人患有某種疾病的概率。
我們把正事件的類標(biāo)簽設(shè)置為1。比值比的對數(shù)稱為Logit函數(shù),它可以寫成如下形式:
可以證明 ? 的定義域為 [0,1],值域為?

logit函數(shù)輸入0到1的值并把它們轉(zhuǎn)換為整個實數(shù)范圍內(nèi)的值,則
輸入的是 特征向量x的條件下,類別y=1的概率, 輸出的是輸出范圍是整個實數(shù)。
模型的線性分量包含設(shè)計矩陣和要估計的參數(shù)矢量。 自變量X的設(shè)計矩陣由N行和K + 1列組成,其中K是模型中指定的獨立變量的數(shù)量。 對于設(shè)計矩陣的每一行,第一個元素xi0 = 1.這是截距或“alpha”。參數(shù)矢量β是長度為K + 1的列向量。有一個參數(shù)對應(yīng)于每個 X列中的K列自變量設(shè)置加上一個β0,用于截距。
即
因此如果我們想得到特征向量x的條件下,類別y=1的概率的話,就是取 Logit() 的反函數(shù)
Sigmoid 函數(shù)
Sigmoid 圖像:
定義域? ,值域[ 0 , 1]

(1)式對應(yīng)的反函數(shù)如果我們只取截距 ? 和1 列數(shù)據(jù),得到
這就是簡單Logistic回歸模型
numpy.ndarray.astype( dtype )
將 array 里的數(shù)據(jù)強制轉(zhuǎn)換類型
- dtype = int 轉(zhuǎn)換成整形,
True-> 1False-> 0
numpy.reshape(a, newshape, order='C')
將矩陣換個形狀
a 要換的矩陣
-
newshape: 可以是 int 類型或者是個 Tuple 類型
如果是 int 類型,返回結(jié)果是該長度的1-D 矩陣
如果是 tuple , 就根據(jù)原矩陣形成新的矩陣,( 行數(shù),列數(shù) )
如果 一個形狀尺寸可以是-1。 在這種情況下,從陣列的長度和剩余尺寸推斷出矩陣的形狀。
y_true 指的是 target 的真實值數(shù)據(jù)向量
-
y_pred 指的是 target 的預(yù)測值數(shù)據(jù)向量
-
可以顯示各項評估值
-
precision 精確率
精確率是針對我們預(yù)測結(jié)果而言的,它表示的是預(yù)測為正的樣本中有多少是真正的正樣本。那么預(yù)測為正就有兩種可能了,一種就是把正類預(yù)測為正類(TP),另一種就是把負(fù)類預(yù)測為正類(FP),也就是 [圖片上傳失敗...(image-6339d6-1563778534298)]
recall 召回率結(jié)果是否完整
而召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預(yù)測正確了。那也有兩種可能,一種是把原來的正類預(yù)測成正類(TP),另一種就是把原來的正類預(yù)測為負(fù)類(FN)。
[圖片上傳失敗...(image-9a0046-1563778534298)]
f1-score F1值是精確度和召回率的調(diào)和平均值(是總體各統(tǒng)計變量倒數(shù)的算術(shù)平均數(shù)的倒數(shù))
support 每個標(biāo)簽的出現(xiàn)次數(shù)
-
sklearn.metrics.classification_report(y_true, y_pred)
分類報告
可以用下面的表格再練習(xí)一下
所有的公式:
-
準(zhǔn)確性
Accuracy: Overall, how often is the classifier correct?
- (TP+TN)/total = (100+50)/165 = 0.91
-
錯誤率
Misclassification Rate: Overall, how often is it wrong?
(FP+FN)/total = (10+5)/165 = 0.09
equivalent to 1 minus Accuracy
also known as "Error Rate"
-
True Positive Rate: When it's actually yes, how often does it predict yes?
TP/actual yes = 100/105 = 0.95
also known as "Sensitivity" or "Recall"
-
fall-out
False Positive Rate: When it's actually no, how often does it predict yes?
- FP/actual no = 10/60 = 0.17
-
特異性
Specificity: When it's actually no, how often does it predict no?
TN/actual no = 50/60 = 0.83
equivalent to 1 minus False Positive Rate
-
精確性
Precision: When it predicts yes, how often is it correct?
- TP/predicted yes = 100/110 = 0.91
-
Prevalence: How often does the yes condition actually occur in our sample?
- actual yes/total = 105/165 = 0.64
從混淆矩陣中我們可以得到很多關(guān)于預(yù)測結(jié)果的評價數(shù)據(jù)
imageTrue positive(TP) eqv. with hit True negative(TN) eqv. with correct rejection False positive(FP) eqv. with false alarm, Type I error False negative(FN) eqv. with miss, Type II error true positives (TP): These are cases in which we predicted yes (they have the disease), and they do have the disease.
true negatives (TN): We predicted no, and they don't have the disease.
false positives (FP): We predicted yes, but they don't actually have the disease. (Also known as a "Type I error.")
false negatives (FN): We predicted no, but they actually do have the disease. (Also known as a "Type II error.")
對于該預(yù)測結(jié)果我們得到混淆矩陣的幾個基礎(chǔ)值
混淆矩陣允許我們做出更多的分析,而不僅僅是局限在正確率。準(zhǔn)確率對于分類器的性能分析來說,并不是一個很好地衡量指標(biāo),因為如果數(shù)據(jù)集不平衡(每一類的數(shù)據(jù)樣本數(shù)量相差太大),很可能會出現(xiàn)誤導(dǎo)性的結(jié)果。例如,如果在一個數(shù)據(jù)集中有95只貓,但是只有5條狗,那么某些分類器很可能偏向于將所有的樣本預(yù)測成貓。整體準(zhǔn)確率為95%,但是實際上該分類器對貓的識別率是100%,而對狗的識別率是0%。
在這165個案例中,模型預(yù)測的結(jié)果“是”110次,“否”預(yù)測55次。 實際上,樣本中的105名患者患有該疾病,而60名患者沒有。
image假設(shè)有一個用來對是否患病預(yù)測結(jié)果進(jìn)行分類的系統(tǒng),混淆矩陣就是為了進(jìn)一步分析性能而對該算法測試結(jié)果做出的總結(jié)。假設(shè)結(jié)果的混淆矩陣如下圖:
舉例說明下混淆矩陣
y_true 指的是 target 的真實值數(shù)據(jù)向量
y_pred 指的是 target 的預(yù)測值數(shù)據(jù)向量
返回值是一個混淆矩陣,分別是false positives,falsenegatives,true positives和true negatives 的值
sklearn.metrics.confusion_matrix( y_true , y_pred)
混淆矩陣
分類結(jié)果評估
-
statsmodels.api.Logit( Y, x_with_intercept)
- 這里的x_with_intercept 是訓(xùn)練集 中 feature 向量加上一列1的結(jié)果:
也可以用 Statsmodels.api 里的邏輯回歸
指的是 回歸擬合 的 特征系數(shù)
coef_是LogisticRegression類型的屬性值之一LogisticRegression.coef_
指的是 回歸擬合 的截距, 即?
intercept_是LogisticRegression類型的屬性值之一LogisticRegression.intercept_
返回給定測試集合的平均準(zhǔn)確率(mean accuracy),浮點型數(shù)值
y_predict 是要預(yù)測的 target 的 i行數(shù)據(jù)向量,y_true 是X 對應(yīng)的真實 target 數(shù)據(jù)向量
LogisticRegression.score( y_predict,y_true)
返回的結(jié)果是一個 i 行的數(shù)據(jù),代表每一條 feature 對應(yīng)的預(yù)測結(jié)果。
輸入值是要預(yù)測的 feature 的 i行數(shù)據(jù)向量
根據(jù)擬合結(jié)果預(yù)測可能性
LogisticRegression.predict( X )
如果參數(shù)是默認(rèn)情況下,返回的第0列是 分類為 0 的概率,第1列是分類為1 的概率
返回的結(jié)果是一個 i 行 j 列的數(shù)據(jù),其中第i行第j列上的數(shù)值是模型預(yù)測第i個預(yù)測樣本的標(biāo)簽為j的概率。所以每一行的和應(yīng)該等于1.
輸入值是要預(yù)測的 feature 的 i行數(shù)據(jù)向量
根據(jù)擬合結(jié)果預(yù)測可能性
LogisticRegression.predict_proba( X )
X 指的是訓(xùn)練集的 feature 數(shù)據(jù)向量
Y 訓(xùn)練集中的 target 值的向量
返回的是模型訓(xùn)練的結(jié)果
模型訓(xùn)練
LogisticRegression.fit(X, y)
-
C = 1e16
C 是正則化強度
Regularization strength的倒數(shù)。正則化就是為了防止模型記憶訓(xùn)練集的數(shù)據(jù),而導(dǎo)致預(yù)測結(jié)果的偏差。尤其是在訓(xùn)練集有很多變量但是數(shù)據(jù)個數(shù)少的的時候,模型訓(xùn)練的時候會根據(jù)訓(xùn)練集的數(shù)修改參數(shù)來盡可能擬合數(shù)據(jù),然而我們想要預(yù)測的數(shù)據(jù)往往并沒有訓(xùn)練集數(shù)據(jù)的特點(比如一個特別大的數(shù)),這樣我們得到的模型的預(yù)測能力就會受損。
更具體地說,如果我們的模型遭受(高)方差(即,它過度擬合訓(xùn)練數(shù)據(jù)),我們可以將正則化視為增加偏差。
過多的偏差會導(dǎo)致欠擬合,我們在非正規(guī)化模型中的目標(biāo)是最小化 cost 函數(shù),即,我們希望找到與全局成本最小值相對應(yīng)的特征權(quán)重(w)
如果我們規(guī)范成本函數(shù)(例如,通過L2正則化),我們在我們的成本函數(shù)(J)中增加一個附加值,隨著參數(shù)權(quán)重(w)的值增加而增加; 添加了一個新的超參數(shù) ? 來控制正則化強度。
Regularization strength? 越大參數(shù)在幅度上增加的可能性較小,僅僅是為了調(diào)整數(shù)據(jù)中的小擾動。
sklearn.linear_model.LogisticRegression()
邏輯回歸 調(diào)用庫實現(xiàn)
-

