python邏輯回歸結果,python 邏輯回歸

本文目錄一覽:

在邏輯回歸中,odds ratio怎麼用python計算?

實際上完成邏輯回歸是相當簡單的,首先指定要預測變數的列,接著指定模型用於做預測的列,剩下的就由演算法包去完成了。

本例中要預測的是admin列,使用到gre、gpa和虛擬變數prestige_2、prestige_3、prestige_4。prestige_1作為基準,所以排除掉,以防止多元共線性(multicollinearity)和引入分類變數的所有虛擬變數值所導致的陷阱(dummy variable trap)。

程序縮進如圖所示

python邏輯回歸結果怎麼看

假設預測目標為0和1 數據中1的個數為a,預測1的次數為b,預測1命中的次數為c 準確率 precision = c / b 召回率 recall = c / a f1_score = 2 * precision * recall / (precision + recall)

怎麼看python中邏輯回歸輸出的解釋

以下為python代碼,由於訓練數據比較少,這邊使用了批處理梯度下降法,沒有使用增量梯度下降法。

##author:lijiayan##data:2016/10/27

##name:logReg.pyfrom numpy import *import matplotlib.pyplot as pltdef loadData(filename):

data = loadtxt(filename)

m,n = data.shape    print ‘the number of  examples:’,m    print ‘the number of features:’,n-1    x = data[:,0:n-1]

y = data[:,n-1:n]    return x,y#the sigmoid functiondef sigmoid(z):    return 1.0 / (1 + exp(-z))#the cost functiondef costfunction(y,h):

y = array(y)

h = array(h)

J = sum(y*log(h))+sum((1-y)*log(1-h))    return J# the batch gradient descent algrithmdef gradescent(x,y):

m,n = shape(x)     #m: number of training example; n: number of features    x = c_[ones(m),x]     #add x0    x = mat(x)      # to matrix    y = mat(y)

a = 0.0000025       # learning rate    maxcycle = 4000    theta = zeros((n+1,1))  #initial theta    J = []    for i in range(maxcycle):

h = sigmoid(x*theta)

theta = theta + a * (x.T)*(y-h)

cost = costfunction(y,h)

J.append(cost)

plt.plot(J)

plt.show()    return theta,cost#the stochastic gradient descent (m should be large,if you want the result is good)def stocGraddescent(x,y):

m,n = shape(x)     #m: number of training example; n: number of features    x = c_[ones(m),x]     #add x0    x = mat(x)      # to matrix    y = mat(y)

a = 0.01       # learning rate    theta = ones((n+1,1))    #initial theta    J = []    for i in range(m):

h = sigmoid(x[i]*theta)

theta = theta + a * x[i].transpose()*(y[i]-h)

cost = costfunction(y,h)

J.append(cost)

plt.plot(J)

plt.show()    return theta,cost#plot the decision boundarydef plotbestfit(x,y,theta):

plt.plot(x[:,0:1][where(y==1)],x[:,1:2][where(y==1)],’ro’)

plt.plot(x[:,0:1][where(y!=1)],x[:,1:2][where(y!=1)],’bx’)

x1= arange(-4,4,0.1)

x2 =(-float(theta[0])-float(theta[1])*x1) /float(theta[2])

plt.plot(x1,x2)

plt.xlabel(‘x1’)

plt.ylabel((‘x2’))

plt.show()def classifyVector(inX,theta):

prob = sigmoid((inX*theta).sum(1))    return where(prob = 0.5, 1, 0)def accuracy(x, y, theta):

m = shape(y)[0]

x = c_[ones(m),x]

y_p = classifyVector(x,theta)

accuracy = sum(y_p==y)/float(m)    return accuracy

調用上面代碼:

from logReg import *

x,y = loadData(“horseColicTraining.txt”)

theta,cost = gradescent(x,y)print ‘J:’,cost

ac_train = accuracy(x, y, theta)print ‘accuracy of the training examples:’, ac_train

x_test,y_test = loadData(‘horseColicTest.txt’)

ac_test = accuracy(x_test, y_test, theta)print ‘accuracy of the test examples:’, ac_test

學習速率=0.0000025,迭代次數=4000時的結果:

似然函數走勢(J = sum(y*log(h))+sum((1-y)*log(1-h))),似然函數是求最大值,一般是要穩定了才算最好。

下圖為計算結果,可以看到訓練集的準確率為73%,測試集的準確率為78%。

這個時候,我去看了一下數據集,發現沒個特徵的數量級不一致,於是我想到要進行歸一化處理:

歸一化處理句修改列loadData(filename)函數:

def loadData(filename):

data = loadtxt(filename)

m,n = data.shape    print ‘the number of  examples:’,m    print ‘the number of features:’,n-1    x = data[:,0:n-1]

max = x.max(0)

min = x.min(0)

x = (x – min)/((max-min)*1.0)     #scaling    y = data[:,n-1:n]    return x,y

在沒有歸一化的時候,我的學習速率取了0.0000025(加大就會震蕩,因為有些特徵的值很大,學習速率取的稍大,波動就很大),由於學習速率小,迭代了4000次也沒有完全穩定。現在當把特徵歸一化後(所有特徵的值都在0~1之間),這樣學習速率可以加大,迭代次數就可以大大減少,以下是學習速率=0.005,迭代次數=500的結果:

此時的訓練集的準確率為72%,測試集的準確率為73%

從上面這個例子,我們可以看到對特徵進行歸一化操作的重要性。

python做邏輯回歸 怎麼把導入的數據分成x,y

簡介

本例子是通過對一組邏輯回歸映射進行輸出,使得網路的權重和偏置達到最理想狀態,最後再進行預測。其中,使用GD演算法對參數進行更新,損耗函數採取交叉商來表示,一共訓練10000次。

2.python代碼

#!/usr/bin/python

import numpy

import theano

import theano.tensor as T

rng=numpy.random

N=400

feats=784

# D[0]:generate rand numbers of size N,element between (0,1)

# D[1]:generate rand int number of size N,0 or 1

D=(rng.randn(N,feats),rng.randint(size=N,low=0,high=2))

training_steps=10000

# declare symbolic variables

x=T.matrix(‘x’)

y=T.vector(‘y’)

w=theano.shared(rng.randn(feats),name=’w’) # w is shared for every input

b=theano.shared(0.,name=’b’) # b is shared too.

print(‘Initial model:’)

print(w.get_value())

print(b.get_value())

# construct theano expressions,symbolic

p_1=1/(1+T.exp(-T.dot(x,w)-b)) # sigmoid function,probability of target being 1

prediction=p_10.5

xent=-y*T.log(p_1)-(1-y)*T.log(1-p_1) # cross entropy

cost=xent.mean()+0.01*(w**2).sum() # cost function to update parameters

gw,gb=T.grad(cost,[w,b]) # stochastic gradient descending algorithm

#compile

train=theano.function(inputs=[x,y],outputs=[prediction,xent],updates=((w,w-0.1*gw),(b,b-0.1*gb)))

predict=theano.function(inputs=[x],outputs=prediction)

# train

for i in range(training_steps):

pred,err=train(D[0],D[1])

print(‘Final model:’)

print(w.get_value())

print(b.get_value())

print(‘target values for D:’)

print(D[1])

print(‘prediction on D:’)

print(predict(D[0]))

print(‘newly generated data for test:’)

test_input=rng.randn(30,feats)

print(‘result:’)

print(predict(test_input))

3.程序解讀

如上面所示,首先導入所需的庫,theano是一個用於科學計算的庫。然後這裡我們隨機產生一個輸入矩陣,大小為400*784的隨機數,隨機產生一個輸出向量大小為400,輸出向量為二值的。因此,稱為邏輯回歸。

然後初始化權重和偏置,它們均為共享變數(shared),其中權重初始化為較小的數,偏置初始化為0,並且列印它們。

這裡我們只構建一層網路結構,使用的激活函數為logistic sigmoid function,對輸入量乘以權重並考慮偏置以後就可以算出輸入的激活值,該值在(0,1)之間,以0.5為界限進行二值化,然後算出交叉商和損耗函數,其中交叉商是代表了我們的激活值與實際理論值的偏離程度。接著我們使用cost分別對w,b進行求解偏導,以上均為符號表達式運算。

接著我們使用theano.function進行編譯優化,提高計算效率。得到train函數和predict函數,分別進行訓練和預測。

接著,我們對數據進行10000次的訓練,每次訓練都會按照GD演算法進行更新參數,最後我們得到了想要的模型,產生一組新的輸入,即可進行預測。

Logistic函數(sigmoid函數)

Logistic函數的表示形式如下:

它的函數圖像如下,由於函數圖像很像一個「S」型,所以該函數又叫 sigmoid 函數。

滿足的性質:

1.對稱性,關於(0,0.5)中心對稱

2.邏輯斯諦方程即微分方程

最早logistic函數是皮埃爾·弗朗索瓦·韋呂勒在1844或1845年在研究它與人口增長的關係時命名的。廣義Logistic曲線可以模仿一些情況人口增長( P )的 S 形曲線。起初階段大致是 指數增長 ;然後隨著開始變得飽和,增加變慢;最後,達到成熟時增加停止。

當一個物種遷入到一個新生態系統中後,其數量會發生變化。假設該物種的起始數量小於環境的最大容納量,則數量會增長。該物種在此生態系統中有天敵、食物、空間等資源也不足(非理想環境),則增長函數滿足邏輯斯諦方程,圖像呈S形,此方程是描述在資源有限的條件下種群增長規律的一個最佳數學模型。在以下內容中將具體介紹邏輯斯諦方程的原理、生態學意義及其應用。

Logistic regression (邏輯回歸)是當前業界比較常用的機器學習方法,用於估計某種事物的可能性。之前在經典之作《數學之美》中也看到了它用於廣告預測,也就是根據某廣告被用戶點擊的可能性,把最可能被用戶點擊的廣告擺在用戶能看到的地方,然後叫他「你點我啊!」用戶點了,你就有錢收了。這就是為什麼我們的電腦現在廣告泛濫的原因了。

還有類似的某用戶購買某商品的可能性,某病人患有某種疾病的可能性啊等等。這個世界是隨機的(當然了,人為的確定性系統除外,但也有可能有雜訊或產生錯誤的結果,只是這個錯誤發生的可能性太小了,小到千萬年不遇,小到忽略不計而已),所以萬物的發生都可以用可能性或者幾率(Odds)來表達。「幾率」指的是某事物發生的可能性與不發生的可能性的比值。

Logistic regression可以用來回歸,也可以用來分類,主要是二分類。它不像SVM直接給出一個分類的結果,Logistic Regression給出的是這個樣本屬於正類或者負類的可能性是多少,當然在多分類的系統中給出的是屬於不同類別的可能性,進而通過可能性來分類。

假設我們的樣本是{ x , y},y是0或者1,表示正類或者負類, x 是我們的m維的樣本特徵向量。那麼這個樣本 x 屬於正類,也就是y=1的「概率」可以通過下面的邏輯函數來表示:

這裡的 θ 是模型參數,也就是回歸係數,σ是sigmoid函數。這樣y=0的「概率」就是:

考查邏輯斯蒂回歸模型的特點,一個事件的幾率(oods)是指這件事發生的概率與不發生概率的比值,如果事件發生的概率是p,那麼該事件的幾率是p/(1-p),該事件的對數幾率(log odds)或者logit函數是

對於邏輯斯蒂回歸而言,可以得到如下的對數幾率

這就是說,在邏輯斯蒂回歸模型中,輸出y=1的對數幾率是輸入x的線性函數,或者說,輸出y=1的對數幾率是由輸入x的線性函數表示的模型,即邏輯斯蒂回歸模型。換句話說,y就是我們的關係變數,例如她喜不喜歡你,與多個因素有關,比如你的人品,你的長相,你是否有錢等。我們把這些因素表示成變數x 1 , x 2 ,…, x m ,那麼這個女生是怎麼考慮這些因素的呢,每個人心理其實都有一桿秤,例如有人比較看重你的人品,人品的權重是0.8,;也有人比較看重你有錢,有錢的權重設置成0.7等等。我們把這些對應於x 1 , x 2 ,…, x m 的權值叫做回歸係數,表達為θ 1 , θ 2 ,…, θ m 。他們的加權和就是你在心目中的得分。

在參數學習時,可以用極大似然估計方法求解。假設我們有n個獨立的訓練樣本{( x 1 , y 1 ) ,( x 2 , y 2 ),…, ( x n , y n )},y={0, 1}。那每一個觀察到的樣本( x i , y i )出現的概率是

對於整個樣本集,每個樣本的出現都是獨立的,n個樣本出現的似然函數為(n個樣本的出現概率是他們各自的概率乘積)

那麼上述的似然函數就是模型的代價函數(cost function),我們要求的參數就是θ*。我們稍微對上式進行轉換

對L(θ)的極大值,得到θ的估計值。問題變成了以對數似然函數為木匾函數的最優化問題。用L(θ)對θ求導,得到

無法解析求解的,所以一般使用迭代的方法求解,通常採用梯度下降法和擬牛頓法。

上面介紹的是兒分類的模型,用於二類分類。可以將其推廣為多項邏輯斯蒂回歸模型(multi-nominal regression model),用於多分類,假設離散隨機變數Y的取值是{1,2,3,…,K}那麼多項邏輯斯蒂回歸的模型是

同理,二項邏輯斯蒂回歸的參數估計的方法也可以推廣到多項邏輯斯蒂回歸。

[1]. 機器學習演算法與Python實踐之(七)邏輯回歸(Logistic Regression)

[2].《統計學習方法》 李航 著

python 訓練完邏輯回歸模型後如何看權重

用的什麼包,sklearn嗎?如果是sklearn的話,邏輯回歸的estimator自帶coef_屬性查看權重

from sklearn.linear_model import LogisticRegression

# 其他準備工作

def train():

    lr = LogisticRegression()

    lr.fit(x_train, y_train)

    print(“得出來的權重:”, lr.coef_)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154396.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-16 14:11
下一篇 2024-11-16 14:11

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論