テスト

テスト

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のこれが凄いポイントの紹介 - のんびりしているエンジニアの日記

leaf classification

リンクした方のコピペしかできない自分・・・

使ったアルゴリズムもよく知らない物ばかりなので、また詳しく調べてみようと思います。
とりあえず結果をcommitしたので今日はこれで寝ます。