前回の記事は線形回帰を説明しました。この記事では、回帰分析群のロジスティック回帰お話になります。
ロジスティック回帰とは
#ライブラリー
import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats
import seaborn as sns
#サンプルデータ作成
distA = stats.norm(30, 5)
distB = stats.norm(15, 4)
data = []
for i in range(100):
data.append((distA.rvs(), “A”))
data.append((distB.rvs(), “B”))
df = pd.DataFrame(data, columns=[“measurement”, “class”])
#データを表示する
print(df.head())
#ヒストグラムの図作成
sns.distplot(df[df[“class”] == “A”][“measurement”])
sns.distplot(df[df[“class”] == “B”][“measurement”])
sns.plt.show()
measurement class
0 28.271342 A
1 14.206356 B
2 18.979297 A
3 14.925955 B
4 27.999255 A
AクラスとBクラスのデータセットを作成しました。
では、sklearnのライブラリーでモデルを作成します。
from sklearn import linear_model
#データ加工 df[“class_num”] = df[‘class’].apply(lambda x: 1 if x == ‘A’ else 0 ) df.sort_values(by=”measurement”, inplace=True)
#モデルの学習 X = df[[“measurement”]] y = df[“class_num”] model = linear_model.LogisticRegression() model.fit(X, y)
#図を作成します。 plt.scatter(df[“measurement”], df[“class_num”]) plt.plot(df[“measurement”], model.predict_proba(X)[:, 1], color=”r”) plt.xlabel(“Measurement”) plt.ylabel(“Probability of being in class B”) plt.show()
#制度の計算 print “Accuracy”, model.score(X, y) |
Accuracy 0.955
このロジスティック回帰モデルは95%の精度で2クラスを良く分離することができます。
詳細:
http://scikit-learn.org/stable/modules/linear_model.html#logistic-regression