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

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

エピソード3-7: KaggleでKickstarter Projectsに挑戦する。(ロジスティック回帰実装まとめ。)

「Kaggle」のデータセットKickstarter Projects」にて、ロジスティック回帰で分類するところまできたので、とりあえず実装コードをまとめておこうと思います。

これまでの流れは以下の記事をご参照ください。

oregin-ai.hatenablog.com

 1.ロジスティック回帰での実装まとめ。

これまでの検討から、実装コードをまとめました。

ざっくりの流れとしては以下の通りです。

1)データを読み込む
2)欠損値がある行はなくしてみる
3)成功、と失敗の行に絞ってみる
4)カテゴリ変数から数値化してみる
5)「goal」「backers」を説明変数としてロジスティック回帰で分類してみる
6)予測精度を確認してみる(Accuracy,Recall,Rrecisionを求める)

 では、実装コードです。

#********************************************************************

# pandas,numpy,matplotlib,codecs,sklearnの各ライブラリをインポート

#********************************************************************



%matplotlib inline

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import codecs as cd

from sklearn.preprocessing import LabelEncoder

from sklearn.linear_model import SGDClassifier

from sklearn.metrics import log_loss, accuracy_score, confusion_matrix

import seaborn as sns



#********************************************************************

#.該当課題のデータを読み込む

#********************************************************************

#201801のデータを読み込んでみる

df_f18 = pd.read_csv('ks-projects-201801.csv')



#********************************************************************

#.欠損値がある行は、とりあえずなくしてみる

#********************************************************************

#1個でも欠損値がある行はとりあえず削除してみる。

df_f18_dna = df_f18.dropna(how='any')



#********************************************************************

#.成功('successful')と失敗('failed')に絞って考える。

#********************************************************************

#成功だけを抽出したDFと失敗だけを抽出したDF

df_f18_success = df_f18_dna[df_f18_dna['state']=='successful']

df_f18_failed =  df_f18_dna[df_f18_dna['state']=='failed']

#両方を結合

df_f18_SorF = pd.concat([df_f18_success,df_f18_failed])



#********************************************************************

#.'state'をカテゴリ変数(文字列)から数値化してみる。

#********************************************************************

#LabelEncoderのインスタンスを生成

le = LabelEncoder()



#stateに出てくるカテゴリを覚えて

#stateを数値に変換

le = le.fit(df_f18_SorF['state'])

df_f18_SorF['state'] = le.transform(df_f18_SorF['state'])



#********************************************************************

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

# 「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)



#********************************************************************

#.識別精度を確認する

# 混同行列を作成し、Accuracy、Recall、Precisionを求める

#********************************************************************

# 学習した結果を使って説明変数を入力して予測

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)))
 

 

とりあえず、一つモデルがつくれたので、ほかの項目も掘り下げて検討してさらなる精度向上を目指していきたいと思います。

 

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

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

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

g-kentei.hatenablog.com