Skip to the content.

Logistic Function

在說 Logistic Regression 之前我們先說 Logistic Function

\[f(x) = \frac{1}{1+\exp(-x)}\]
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = [10, 10]

x = np.arange(-5, 5, 0.1)
y = 1/(1+np.exp(-x))

plt.plot(x, y)

Logistic Regression

這是個二分類問題,只要$x$在某個值以上就當他是對,反之就當他是錯。

我們再回想一下我們的資料 $X$ 不是一維的數據阿,我們可以去求函數 $f$,

\[f(X) = x\]

我們的 $f$ 可以是線性的或是polynomial。
對了二分類怎麼加殼成為多分類請參考 輸出,下面進入實戰。

# Logistic Regression
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import linear_model
from sklearn.metrics import mean_squared_error


X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=87)

# 準備 Logistic 模型
classifier = linear_model.LogisticRegression()

classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)

print('Training accuracy: ', classifier.score(X_train, y_train))
print('Testing accuracy: ', classifier.score(X_test, y_test))

我們還可以用參數去做 Ridge, Lasso 跟 Elastic-Net

下面特別說明一下,參數的使用

只有在選 elasticnet 的時候要給出 l1 跟 l2 的比例。

# Logistic Regression
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import linear_model
from sklearn.metrics import mean_squared_error


X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=87)

# 準備 Logistic 模型
classifier = linear_model.LogisticRegression(solver='saga', penalty='elasticnet', l1_ratio=0.1)

classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)

print('Training accuracy: ', classifier.score(X_train, y_train))
print('Testing accuracy: ', classifier.score(X_test, y_test))