邏輯回歸十用於分類的演算法,損失函式等引數、公式表達見:吳恩達機器學習總結
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嵌入到決策過程中,稱為 ...