bosch
しばらくRのお勉強をしていました、のでkaggleとpyとは疎遠だったのですが、
に取り組んでいこうと思います。
Bosch Production Line Performance | Kaggle
僕は右も左もわからんので、まずは人様のカーネルを丸パクリすることから始めようと思います。
House Price3
HousePriceの順位が 324/1441で、
rmse が 0.12102にまで上がったので、一旦まとめようと思います。
こんな感じのコードです
データのインポート
import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy.stats import skew train = pd.read_csv('../input/train.csv') test = pd.read_csv('../input/test.csv')
テストデータと教師データをまとめて、skewを取り除く、
naデータを埋め合わせ、カテゴリカルデータをダミーに置き換える
all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'], test.loc[:,'MSSubClass':'SaleCondition'])) train["SalePrice"] = np.log1p(train["SalePrice"]) numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) #compute skewness skewed_feats = skewed_feats[skewed_feats > 0.75] skewed_feats = skewed_feats.index all_data[skewed_feats] = np.log1p(all_data[skewed_feats]) all_data = pd.get_dummies(all_data) all_data = all_data.fillna(all_data.mean()) X_train = all_data[:train.shape[0]] X_test = all_data[train.shape[0]:] y = train.SalePrice
今回はlassoを使用
#### models selection from sklearn.linear_model import Ridge ridge = Ridge(alpha = 6.7) from sklearn.ensemble import RandomForestRegressor rfr = RandomForestRegressor(n_estimators=500, n_jobs=-1) from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.0004) model = lasso ### prediction model.fit(X_train, y)
提出
preds = np.expm1(model.predict(X_test)) solution = pd.DataFrame({"id":test.Id, "SalePrice":preds}) solution.to_csv("ridge10.csv", index = False)
ほぼ人様のカーネルを丸パクリしただけです・・・・
それで、cvのスコアはいいのに、提出したらトンデモナイエラーが出たので、
なんぞ?と思ってたのですが、
skewを取り除くときに、
np.log1p( )
したら、提出する前に、
np.expm1()
して元に戻そうね。
ってだけの話でした。
他のアルゴリスムも試したのですが、lassoが一番良かったです。
RandomForestとか、XGBoostとかはまだ勉強してないので、
いまいちどうやってチューニングするか分かってないのでスルーしました。
感想
正規化した線形回帰に少し慣れたかな??って感じです。
Lassoの方がRidgeよりも成績が良かったってことは、
不要な次元が多かったってことでしょうか?
どういうデータにはどのアルゴリズムが適しているか、
判別できるように早くなりたいなーというこの頃です。
パラメーターチューニング
特に書く内容があるわけではないのですが、自分用にパラメーターチューニングのリンク集
couseraで、学習曲線の話は一度習ったのですが、忘れかけているので復習。
Machine Learning with Scikit Learn (Part II) - 人工知能に関する断創録
当面は「sklearnを使いこなせるようになる」というのが目標かな
www.youtube.com
表現学習、word2vec等のことでしょうか。面白そう
http://www.ai-gakkai.or.jp/my-bookmark_vol31-no4/
houses prices2
引き続きhose priseやっていきます。
とりあえずlassoとridgeとやらを勉強します。
https://www.youtube.com/watch?v=ipb2MhSRGdw
簡単に教材ビデオが見つかるなんて良い時代ですね〜
http://highschoolstudent.hatenablog.com/entry/2015/02/08/142354
Ridgeとは感覚的にはどうやら、
高次の方程式になるとモデルが複雑になりすぎて、二乗誤差をある程度以上は小さくできない
複雑さ=パラーメーターの大きさとして
パラメーターにペナルティを与える=回帰線を単純化する
みたいです。
リッジ/Ridge回帰、Lasso回帰、Elastic Net (R - glmnet) - 東京に棲む日々
デコボコになった線を滑らかにして、汎化するイメージですね。
良さそうなブログを見つけたのでコピペ
http://d.hatena.ne.jp/isseing333/20111123/1322053940
RidgeとLassoの違いについて勉強してたのですが、
L1/L2正則化の話になるようです。
http://tjo.hatenablog.com/entry/2015/03/03/190000
またまた超感覚的な理解になるのですが、
Ridge = W(重みベクトル)がどれもゼロにならない = 次元が削減されない
Lasso = Wに、ゼロの値になるものがある = 次元が削減される
Elastic Net = Ridge と Lasso のミックス
みたいです。
意図的に次元を削減したい時はLassoってことでしょうか?
引き続き勉強しようと思います。
houses prises
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
houses prisesをやっていきます。
と思ったのですが、あまりに知識がないので、couseraを二週間強ぐらいやってました。
Ang先生に、とりあえず動くものを作るのがいいよと習ったので、まずは簡単なものからやろうと思います。
#I'm a super bigginer <:@|=<; import pandas as pd import matplotlib.pyplot as plt train = pd.read_csv('../input/train.csv') test = pd.read_csv('../input/test.csv') all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'], test.loc[:,'MSSubClass':'SaleCondition'])) all_data = pd.get_dummies(all_data) all_data = all_data.fillna(all_data.mean()) X_train = all_data[:train.shape[0]] X_test = all_data[train.shape[0]:] y = train.SalePrice from sklearn import linear_model from sklearn.linear_model import Ridge ridge = Ridge(alpha = 3) #model = linear_model.LinearRegression() model = ridge model.fit(X_train, y) preds = model.predict(X_test) solution = pd.DataFrame({"id":test.Id, "SalePrice":preds}) solution.to_csv("linear_regression.csv", index = False)
未処理のデータと普通の線形回帰だと、確か1000/1300位くらいだったのですが、
skewを除き、ridgeを使ったら成績が980位くらいまでアップしました。
ところでridgeってなんだ、lossoってなんだんだ・・・・。
ここからさらに改善していきます。
こんな私でもDeepNN
本日のタスク
https://www.kaggle.com/najeebkhan/leaf-classification/neural-network-through-keras/comments
こちらの記事を参考にDNNがどんなものなのかぼんやりと把握しようと思います。
とりあえず、pyenv→anaconda→theano→kerasの順番でインストールします。
pyenv local しても、デフォルトのpythonが優先される現象が起きたのですが、
eval "$(pyenv init -)"
したら直りました。
自分用メモ
#intラベルに張り替え y = data.pop('species') y = LabelEncoder().fit(y).transform(y) print(y.shape) #feature scaling X = StandardScaler().fit(data).transform(data) print(X.shape)
crossentropyって何なんだろう???
https://ja.wikipedia.org/wiki/%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC
どうやら、正解を選ぶための小さい方が好ましい尺度みたいですね。
あとkerasがimportできず詰んでました。
症状としては、tendorflowもtheanoも最新版のsixというモジュールを前提に設計されているようなのですが、sixをアップグレードしてもmacにデフォルトで入っているsixが優先せれてしまうせいみたいです。
解決策としてはvirtualenvを利用して新たに環境を構築せよとの事です。
7.一般的な問題 - TensorFlowの日本語まとめ
python - Unable to import Tensorflow "No module named copyreg" - Stack Overflow
#バックエンドの切り替えの仕方を何度も忘れるのでコピペ ~/.keras/keras.json
正しいTFインストール
Mac OS XにTensorflowをインストールして、Hello worldまでやってみる - ワタナベ書店
今度はTFを使うと、kerasのimportで
File "/Library/Python/2.7/site-packages/keras/backend/__init__.py", line 35, in <module> assert _backend in {'theano', 'tensorflow'}
が出るように・・・・。
teanoなら動くのでtheano使いますが、どうやったら解決できるのか。。。
leaf classification
https://www.coursera.org/learn/machine-learning/home
couseraのmachine learnigコースやってました。
Andrew Ng先生の説明が直感的で非常に分かりやすいです。
日本語の字幕もあるし、機会学習を始めた時に、一番最初にやれば良かったなってくらい良い教材です。
本日のデータ
https://www.kaggle.com/c/leaf-classification
99種類の葉っぱのデータが10ずつで全部で990、columnはmarginやtextureが全部で192?くらいでした。
と言っても僕は右も左も分からないので、人様のカーネルをパクっていこと思います。
https://www.kaggle.com/jeffd23/leaf-classification/10-classifier-showdown-in-scikit-learn←こちらの記事
全部で10種類の分類器を試してみよう!って内容みたいです。
結果から言うと、LinearDiscriminantAnalysisの精度が一番良かったです。
ところで、kaggleのphone validationをしたんですけど、サンフランシスコ??から直接電話がかかってきてびっくりしました。
当然機会音声でしたけどね・・・。
あとjupyter notebookを使ってたんだけど、途中でnotebookの進化版らしいjupyterlabとやらを発見したので、使ってみました。
Jupyter Notebookの次世代版、JupyterLabのこれが凄いポイントの紹介 - のんびりしているエンジニアの日記