testとtrainのデータを比較する。
二つのデータで大きな差がなければ、より適当な予測ができますね。
差異が大きければ、それだけズレるでしょう。
train_df.dtypes
でデータの型を見てみます。
タイタニックのデータを例にします。
#データの型 train_df.dtypes
- intは整数(数値)
- floatは小数(数値)
- objectは文字列
をそれぞれ表します。
値がobjectのデータを見比べる。
House Prices – Advanced Regression Techniques
というコンペのデータを使っていた時、objectが多すぎてびっくりしました。
というわけで。
調べた結果。
#objectなcolumnを抽出する。
train_df.select_dtypes(include=object)
#データ型objectであるcolumのリストが欲しい。
list(train_df.select_dtypes(include=object).columns)
たどり着いたのがこのコード
for col in list(train_df.select_dtypes(include=object).columns): print(train_df[col].value_counts()) print(test_df[col].value_counts())
もっとシンプルにtrainとtestを見比べられたらいいのだけれど。
例えばNoSeWaはtrainデータにはあるがtestデータにはない。どうする?
(機械学習の仕組みが今だにわからないので扱い方がふめい)
こちらも結構偏りが。(偏りの程度をどのように評価するかが問題だが機械学習の仕組みがわからないからなんとも言ない)
groupbyを使ってこんな情報も得られるようですが不明。
数値なのにobject?
そんなデータセットもあるそうです。
df[‘object型で書かれた数値を表すのコラム’] = df[‘object型で書かれた数値を表すのコラム’].astype(int)
to_numericというメソッドを使ってもできるそうです。
値が数値のデータを比較する
for col in list(train_df.select_dtypes(include=int).columns): print(train_df[col].describe()) print(test_df[col].describe())
LotAreaの最大値がかなり偏っている。
この偏りあるデータが機械学習のプロセスでどのように処理されるのか、仕組みが知りたい。
データを整える。
データの欠損値をどうにかする。
欠損値があると機械学習してくれないから「適切な値で補う」。
欠損値が多すぎるcolumnsは「削除する」こともあり。
欠損値の存在を知る。
all_df.isnull().sum()
columが多いととんでもない数が出て、「全部なんとかしないとダメなのか」と思う。
House Prices – Advanced Regression Techniquesの欠損の一部を紹介。
データがないのか、それとも意味のあるNANなのかを判断する。
House Prices – Advanced Regression Techniquesのデータの中にあるdata_description.txtに
と書かれており、PoolQCのNAは欠損ではなく、「プールありません」の意味だという。
削除する
例えば
Titanic – Machine Learning from DisasterのCabinは欠損が多く含まれています。
この「値なし」は「未知」「わからない」「データがない」という意味です。
Pclassがわかっていたらいい、Cabinの情報はいらないと判断すれば、消してしまいましょう。
all_df.drop(columns=['Name','Ticket','Cabin'], inplace=True)
他にも消したい列があればここで。
ヘンテコなパラメータを置き換えて、消す?
平均値で埋め合わせる
タイタニックのFareを平均値で埋めるのはアリですが、平均値で埋める以外の、もっと妥当な理屈で欠損値を埋めたほうが気持ちがいいですね。
all_df['Fare'].fillna(fare_calc['Fare'].mean(),inplace=True)
文字列を数値に変換する
replace
データが文字列で表されていたら、機械は学習してくれないそうです。
all_df['Sex'].replace(['male','female'],[0,1], inplace=True)
これでSexの中身が変化します
inplace=Trueは上書きです。

get_dummies
別の方法で、pandasのメソッドを使うと。
all_df = pd.get_dummies(all_df, columns=["Embarked"])
all_df =の件は、未確定です。
dtypeを調べたらこうなった。categoryというタイプにはならなかった。
mapを使う
数値がカテゴリーを表すかどうかを判断する。
カテゴリーを表す数値(特定の値しか取らない)なのか、比例尺度を表す数値(例えば金額や年齢)なのか。
文字列を数値に変換したので、なんのことかわかりますね。
グループを表す数値なのか、どうか。
データを取得したコンペのページのDataタブを開くとData Dictionaryにパラメータの意味が載っています。
columnを500こ表示させたいなら
pd.set_option('display.max_columns', 500)
外れ値を除外する(視覚化する)
機械学習の色々なアルゴリズムの中身がわからないとなぁ。
コメント