西瓜書3 3對率回歸

2021-10-05 12:59:16 字數 4174 閱讀 1096

這是西瓜書第一道實踐題,感覺書裡對於原理講解過於生硬,有點難以理解,所以我更多採用從andrew ng的深度學習中學到的logistic regression來描述

資料如下

編號密度

糖分好瓜

00.697

0.46011

0.774

0.37612

0.634

0.26413

0.608

0.31814

0.556

0.21515

0.403

0.23716

0.481

0.14917

0.437

0.21118

0.666

0.09109

0.243

0.267010

0.245

0.057011

0.343

0.099012

0.639

0.161013

0.657

0.198014

0.360

0.370015

0.593

0.042016

0.719

0.103

0

import pandas as pd

import numpy as np

from sklearn.model_selection import train_test_split

df = pd.

dataframe()

x= df[

['midu'

,'tang']]

.values

y = df[

'hao'

].values

#為了使資料形式符合需要演示需要,將其進行轉置x=

x.reshape([

2,17]

)y = y.

reshape([

1,17]

)

'''

initialize parameter

'''def init_params()

: #根據x資料的形狀來確定生成w和b

w = np.random.

randn(2

,1) b =

0return w, b

'''sigmoid activation func

'''def sigmoid(z

):s =1/

(1+np.

exp(-z

))return s

向前傳播:

由cost func對w 和b分別求導:

∂ j∂

w=1m

x(a−

y)

t(7)

\frac = \fracx(a-y)^t\tag

∂w∂j​=

m1​x

(a−y

)t(7)∂j

∂b=1

m∑i=

1m(a

(i)−

y(i)

)(8)

\frac = \frac \sum_^m (a^-y^)\tag

∂b∂j​=

m1​i

=1∑m

​(a(

i)−y

(i))(8)

'''

forward prop and compute cost and back prop

'''def f_prop

(w, b,

x, y)

: m =

x.shape[

1]#一共有m個例項

a=sigmoid

(np.

dot(w.t,

x)+ b)

#計算cost函式

cost =-1

/m * np.

sum(y*np.

log(a)

+(1-y)

*np.

log(1-

a)) #對w和b求導數

dw =

1/m * np.

dot(x,

(a-y).t)

db =

1/m * np.

sum(

a- y)

#組合到乙個字典

grads =

return cost, grads

'''optimize parameters--gradient descent

'''def op_params

(w, b,

x, y, num_iter, learning_rate)

: costs =

for i in

range

(num_iter)

: cost ,grads =

f_prop

(w, b,

x, y)

dw = grads[

'dw'

] db = grads[

'db'

] #引數最優化

w = w - learning_rate * dw

b = b - learning_rate * db

costs.

(cost)

params =

return costs, params

'''

predict

'''def predict

(params,x)

: m =

x.shape[1]

y_prediction = np.

zeros((

1,m)

)

w = params[

'w']

b = params[

'b']a=

sigmoid

(np.

dot(w.t,

x)+b)

#大於0.5就是真,小於等於0.5就是假

for i in

range

(m):ifa

[0, i]

>

0.5:

y_prediction[

0, i]=1

ifa[0

, i]

<=

0.5:

y_prediction[

0, i]=0

return y_prediction

%matplotlib notebook 

import matplotlib.pyplot as plt

'''merge all the func

'''w, b =

init_params()

cost, grads =

f_prop

(w, b,

x, y)

costs, params =

op_params

(w, b,

x, y,

1000

,0.9

)plt.

plot

(costs)

最後的損失函式曲線,1000次迴圈, 0.9學習率:

'''

make prediction

'''y_prediction =

predict

(params,x)

count =

0for i in

range(x

.shape[1]

):if y_perdiction[

0, i]

== y[

0, i]

: count +=

1precision = count/

x.shape[1]

print

('準確率是:'

,precision)

準確率是: 0.5882352941176471顯然,這個模型使underfit的,但是基於有限的資料集,且cost func已經達到極限,所以很難再找到更優的引數,就先這樣吧。

西瓜書 對率回歸 梯度下降法

1 資料集 在我的部落格裡有.txt格式的 你也可以自己構造,如下 density np.array 0.697,0.774,0.634,0.608,0.556,0.430,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.7...

機器學習(西瓜書)第三章 3 3對率回歸程式設計

常用 1.f csv.reader open watermelon3 0 ch.csv r 2.enumerate 3.concatenate np.concatenate px1,px2,np.ones 50,1 axis 1 4.np.where ans 0.5,是 否 5.import mat...

作業 「西瓜書」邏輯回歸

名稱 描述對數機率回歸演算法的過程。提交形式 簡潔的文字描述演算法的通用形式,文字打卡提交。邏輯回歸 logistic regression 也稱為對數機率回歸。雖然名字上是回歸,但實際是處理分類問題的演算法 回歸問題的輸出是連續值,分類問題的輸出是離散值 1.引入 多元 線性回歸 廣義線性回歸 對...