機器學習 邏輯回歸

2021-09-25 16:19:49 字數 4049 閱讀 7789

邏輯:邏輯,源自古典希臘語 (logos),最初的意思是「詞語」或「言語」,引申意思是「思維」或「推理」。 2023年,教育家嚴復將其意譯為「名學」,音譯為「邏輯」。

回歸:回歸是統計學的乙個重要概念,其本意是根據之前的資料**乙個準確的輸出值。

邏輯回歸是目前使用最為廣泛的一種學習演算法,用於解決分類問題。與線性回歸演算法一樣,也是監督學習演算法。

對於分類問題分類,y 取值為0 或者1。如果使用線性回歸,那麼線性回歸模型的輸出值可能遠大於1,或者遠小於0。導致代價函式很大。

邏輯函式(logical function)是一種描述數位電路特點的工具。輸出量是高、低電平,可以用二元常量(0,1)來表示。

hθ(x) = 11+

e−xθ

\frac}

1+e−xθ

1​關於這個模型為了方便後面sigmoid函式的計算我們需要對其求導,求導過程如下:

這裡用到的代價函式與我們之前用到的不同,需要用交叉熵代價函式

j(θ) = −1m

∑i=1

m[y(

i)ln

(hθ(

x(i)

))+(

1−y(

i))l

n(1−

hθ(x

(i))

)]-\frac\sum_^m[y^ln(h_θ(x^)) + (1-y^)ln(1-h_θ(x^))]

−m1​∑i

=1m​

[y(i

)ln(

hθ​(

x(i)

))+(

1−y(

i))l

n(1−

hθ​(

x(i)

))]因為y的取值不是0就是1,所以這樣寫可以直接在一方為0是另乙個可以計算

該代價函式j(θ)是乙個凸函式,並且沒有區域性最優值;

因為代價函式是凸函式,無論在**初始化,最終達到這個凸函式的最小值點。

在得到代價函式以後,便可以用梯度下降演算法來求得能使代價函式最小的引數了。

import numpy as np

import matplotlib.pyplot as plt

plt.rcparams[

'font.sans-serif']=

['simhei'

]plt.rcparams[

'axes.unicode_minus']=

false

# 讀取資料

data_train = np.loadtxt(r'c:\users\shy\pycharmprojects\untitled\week4\mushroomtrain.txt'

,delimiter=

',')

data_test = np.loadtxt(r'c:\users\shy\pycharmprojects\untitled\week4\mushroomtest.txt'

,delimiter=

',')

# 提取資料

train_x,train_y = data_train[:,

:-1]

,data_train[:,

-1]test_x,test_y = data_test[:,

:-1]

,data_test[:,

-1]# 資料預處理

defpropeross

(x,y)

:# 特徵縮放

x -= np.mean(x,axis=0)

x /= np.std(x,axis=

0,ddof=1)

# 資料初始化

x = np.c_[np.ones(

len(x)

),x]

y = np.c_[y]

return x,y

train_x,train_y = propeross(train_x,train_y)

test_x,test_y = propeross(test_x,test_y)

# 啟用函式

defg

(z):

h =1.0/(1

+np.exp(

-z))

return h

defmodel

(x,theta)

: z = np.dot(x,theta)

h = g(z)

return h

# 代價

defcostfunc

(h,y,r)

: m =

len(h)

j =-1.0

/m*np.

sum(y*np.log(h)+(

1-y)

*np.log(

1-h)

)+ r

return j

# 梯度下降

defdraedesc

(x, y, alpha=

0.01

, iter_num=

100, lamba=60)

: m,n = x.shape

theta = np.zeros(

(n,1))

j_history = np.zeros(iter_num)

for i in

range

(iter_num)

: h = model(x,theta)

theta_r = theta.copy(

) theta_r[0]

=0r = lamba/(2

* m)

*np.

sum(np.square(theta_r)

) j_history[i]

= costfunc(h,y,r)

deltatheta =

1.0/m *

(np.dot(x.t,h-y)

+lamba*theta_r)

theta -= alpha*deltatheta

return j_history,theta

j_history,theta = draedesc(train_x,train_y)

# 準確率

defscore

(h, y)

: count =

0for i in

range

(len

(h))

:if np.where(h[i]

>=

0.5,1,

0)== y[i]

: count +=

1return count/

len(h)

# 獲得**值

train_h =model(train_x,theta)

test_h = model(test_x,theta)

print

('訓練集準測率為'

,score(train_h,train_y)

)print

('測試集準測率為'

,score(test_h,test_y)

)# 畫圖

defdraw

(x,y,title)

: plt.title(title)

plt.scatter(x[y[:,

0]==0

,2],x[y[:,

0]==0

,3],label=

'負相關'

) plt.scatter(x[y[:,

0]==1

,2],x[y[:,

0]==1

,3],label=

'正相關'

) plt.legend(

) plt.show(

)draw(train_x,train_y,

'訓練集'

機器學習 邏輯回歸

邏輯回歸 線性回歸的式子,作為邏輯回歸的輸入 適用場景 二分類 線性回歸的輸入 sigmoid函式 分類 0,1 概率值 計算公式 當目標值為1時 損失函式的變化 當目標值為0時 損失函式的變化 下面用乙個例項來說明邏輯回歸的用法 癌症概率 部分資料的截圖如下 資料描述 699條樣本,供11列資料,...

機器學習 邏輯回歸

coding utf 8 import pandas as pd import seaborn as sns from sklearn.model selection import train test split import matplotlib.pyplot as plt 用於畫圖 from ...

機器學習 邏輯回歸

lr指的是logistic regression,邏輯回歸。而不是linear regression,線性回歸,不要問為什麼,記住它就好了,haha。它是一種監督學習分類演算法,不是回歸演算法!這裡千萬要注意啦。lr常用於二分類問題,0或者1 假如我們有一堆二維資料,也就是這堆資料有2個特徵x1和x...