邏輯回歸演算法

2021-10-04 10:40:21 字數 3289 閱讀 2436

邏輯回歸十用於分類的演算法,損失函式等引數、公式表達見:吳恩達機器學習總結

from sklearn.linear_model import logisticregression

x_train=np.array([0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.5,4.00,4.25,4.50,4.75,5.00,5.50]).reshape(-1,1)

y_train=[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]

model=logisticregression()

model.fit(x_train,y_train)

accuracy=model.score(x_train,y_train)

print(accuracy)

print(model.predict_proba(5))

print(model.predict(5))

import numpy as np

# from .metrics import accuracy_score

class logisticregression:

def __init__(self):

"""初始化linear regression模型"""

self.coef_ = none

self.intercept_ = none

self._theta = none

def _sigmoid(self, t):

return 1. / (1. + np.exp(-t))

def fit(self, x_train, y_train, eta=0.01, n_iters=1e4):

"""根據訓練資料集x_train, y_train, 使用梯度下降法訓練logistic regression模型"""

assert x_train.shape[0] == y_train.shape[0], \

"the size of x_train must be equal to the size of y_train"

def j(theta, x_b, y):

y_hat = self._sigmoid(x_b.dot(theta))

try:

return - np.sum(y*np.log(y_hat) + (1-y)*np.log(1-y_hat)) / len(y)

except:

return float('inf')

def dj(theta, x_b, y):

return x_b.t.dot(self._sigmoid(x_b.dot(theta)) - y) / len(x_b)

def gradient_descent(x_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):

theta = initial_theta

cur_iter = 0

while cur_iter < n_iters:

gradient = dj(theta, x_b, y)

last_theta = theta

theta = theta - eta * gradient

if (abs(j(theta, x_b, y) - j(last_theta, x_b, y)) < epsilon):

break

cur_iter += 1

return theta

x_b = np.hstack([np.ones((len(x_train), 1)), x_train])

initial_theta = np.zeros(x_b.shape[1])

self._theta = gradient_descent(x_b, y_train, initial_theta, eta, n_iters)

self.intercept_ = self._theta[0]

self.coef_ = self._theta[1:]

return self

def predict_proba(self, x_predict):

"""給定待**資料集x_predict,返回表示x_predict的結果概率向量"""

assert self.intercept_ is not none and self.coef_ is not none, \

"must fit before predict!"

assert x_predict.shape[1] == len(self.coef_), \

"the feature number of x_predict must be equal to x_train"

x_b = np.hstack([np.ones((len(x_predict), 1)), x_predict])

return self._sigmoid(x_b.dot(self._theta))

def predict(self, x_predict):

"""給定待**資料集x_predict,返回表示x_predict的結果向量"""

assert self.intercept_ is not none and self.coef_ is not none, \

"must fit before predict!"

assert x_predict.shape[1] == len(self.coef_), \

"the feature number of x_predict must be equal to x_train"

proba = self.predict_proba(x_predict)

return np.array(proba >= 0.5, dtype='int')

def score(self, x_test, y_test):

"""根據測試資料集 x_test 和 y_test 確定當前模型的準確度"""

y_predict = self.predict(x_test)

n=0for i in range(len(y_predict)):

if y_predict[i]==y_test[i]:

n+=1

return(n/np.sum(y_predict))

# return accuracy_score(y_test, y_predict)

def __repr__(self):

return "logisticregression()"

邏輯回歸演算法

二 邏輯回歸演算法原理 4.邏輯回歸問題中的梯度下降演算法 三 多元回歸分類 四 正則化 模型假設是 h x g tx h x g tx h x g tx 其中 x代表特徵向量 代表引數 g代表啟用函式,乙個常用的啟用函式為s型函式 sigmoid function 公式為 g z 11 e z g...

邏輯回歸演算法梳理

邏輯回歸演算法梳理 1 邏輯回歸與線性回歸的聯絡與區別 區別 邏輯回歸 值返回的離散值,線性回歸返回的連續值 聯絡 2 邏輯回歸的原理 邏輯回歸就是這樣的乙個過程 面對乙個回歸或者分類問題,建立代價函式,然後通過優化方法迭代求解出最優的模型引數,然後測試驗證我們這個求解的模型的好壞 3 邏輯回歸損失...

邏輯回歸演算法梳理

其原理是將樣本的特徵和樣本發生的概率聯絡起來。優化方法 模型評估指標 在資料極度偏斜的情況下,分類準確度存在問題,比如 癌症,因此只用分類準確度是遠遠不夠的。引入以下指標,優點 缺點 樣本的過取樣和欠取樣 直接基於原始訓練集進行學習,但在用訓練好的分類器進行 時,將y 1 y嵌入到決策過程中,稱為 ...