現在取り組み中の「Kaggle」のデータセット「Kickstarter Projects」にて、分類に採用する説明変数を選択したので、ロジスティック回帰で分類していきたいと思います。
0.これまでの続きなので、ライブラリのインポートや、データ読み込み、データの前処理が実施されている前提です。これまでをご覧になっていない方は、以下をご参照ください。
これまでの検討から、目的変数「state」を'successful'と'false'に分類するために、説明変数として「goal」と「backers」を利用して分類してみることにしました。
#目的変数'state'を正解としてyに格納 y = df_f18_SorF['state'].values #説明変数'goal','backers'を入力としてXに格納 X = df_f18_SorF[['goal', 'backers']].values #ロジスティック回帰で学習 clf = SGDClassifier(loss='log', penalty='none', max_iter=10000, fit_intercept=True, random_state=1234) clf.fit(X, y)sklearn.linear_modelのSGDClassifire()(確率的勾配降下法を用いた分類)の引数に以下を指定して、分類モデルのインスタンスを作成します。
fit()メソッドの引数に目的変数(y)と説明変数(X)を指定して、確率論的勾配降下法で線形モデルを近似します。
- loss : 損失関数 今回は'log'を指定
- penalty:過学習を防止するための正則化項 今回は'none'を指定。
- max_iter:トレーニングデータを何回使用するか 今回は10000を指定
- fit_intercept:切片を推定するかどうか 今回はTrueを指定
- ranom_state:データシャッフル時の乱数の種 今回は1234を指定
2.識別精度を確認してみる。
# 学習した結果を使って説明変数を入力して予測 y_est = clf.predict(X) #混同行列を作成 tn, fp, fn, tp = confusion_matrix(y, y_est).ravel() print(fn, fp) print(tn, tp) #'Accuracy、Recall、Precisionを求めて表示 print('Accuracy = {:.3f}%'.format(100 * (tn+tp)/(tn+fp+fn+tp))) print('Recall = {:.3f}%'.format(100 * (tp)/(fn+tp))) print('Precision = {:.3f}%'.format(100 * (tp)/(fp+tp)))
2996 19902
103320 80771
Accuracy = 88.938%
Recall = 96.423%
Precision = 80.231%それぞれの指標で、80%以上と、それなりの精度がでているようです。
前回までに検討した、「goal」と「backers」を説明変数として採用することで、訓練データにおいては、それなりの精度が出せる分類を行うことができるようになりました。
ほかの項目も掘り下げて検討してさらなる精度向上を目指していきたいと思います。
2019年3月9日(土)にG検定を受験し、見事合格できました!
受験の体験記や勉強法などを別のブログにまとめました。
これから受験される方がいらっしゃいましたらご参考まで。