「Kaggle」のデータセット「Kickstarter Projects」にて、ロジスティック回帰で分類するところまできたので、とりあえず実装コードをまとめておこうと思います。
これまでの流れは以下の記事をご参照ください。
これまでの検討から、実装コードをまとめました。
ざっくりの流れとしては以下の通りです。
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検定を受験し、見事合格できました!
受験の体験記や勉強法などを別のブログにまとめました。
これから受験される方がいらっしゃいましたらご参考まで。