俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

エピソード3-6: KaggleでKickstarter Projectsに挑戦する。(ロジスティック回帰で分類する。)

現在取り組み中の「Kaggle」のデータセットKickstarter Projects」にて、分類に採用する説明変数を選択したので、ロジスティック回帰で分類していきたいと思います。

0.これまでの続きなので、ライブラリのインポートや、データ読み込み、データの前処理が実施されている前提です。これまでをご覧になっていない方は、以下をご参照ください。

oregin-ai.hatenablog.com

 1.ロジスティック回帰で分類してみる。

 これまでの検討から、目的変数「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()(確率的勾配降下法を用いた分類)の引数に以下を指定して、分類モデルのインスタンスを作成します。
  • loss : 損失関数 今回は'log'を指定
  • penalty:過学習を防止するための正則化項 今回は'none'を指定。
  • max_iter:トレーニングデータを何回使用するか 今回は10000を指定
  • fit_intercept:切片を推定するかどうか 今回はTrueを指定
  • ranom_state:データシャッフル時の乱数の種 今回は1234を指定
fit()メソッドの引数に目的変数(y)と説明変数(X)を指定して、確率論的勾配降下法で線形モデルを近似します。

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%以上と、それなりの精度がでているようです。
 

f:id:kanriyou_h004:20190506201314j:plain

 

前回までに検討した、「goal」と「backers」を説明変数として採用することで、訓練データにおいては、それなりの精度が出せる分類を行うことができるようになりました。

ほかの項目も掘り下げて検討してさらなる精度向上を目指していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com