私のプロジェクトには、タイトルといくつかのメジャーとの関係を確立することが含まれます。
私は仕事のために pandas と sklearn に依存しており、sklearn-pandas のハングアウトを取得しています。これは、多くの機能結合を連鎖させるのではなく、機能抽出ステップを処理するのに DataFrameMapper が便利であることを発見したためです。
一言で言えば、これは次のようなものです。
dfm = DataFrameMapper([
('title', CountVectorizer()),
(['width', 'height', 'length', 'weight'], StandardScaler()),
])
次に、次のようなパイプラインで使用したいと思います。
p = make_pipeline(dfm, LinearRegression())
この種のものはうまくいくはずです。しかし、機能の「配置」が維持されていないことがわかりました。
この単純なモデルを次のようにトレーニングしようとすると、次のようになります。
data = pd.read_csv("data.csv") # a couple hundred thousands of records.
train_sample = data[:100000] # arbitrary sample.
test_sample = data[100000:] # arbitrary test.
p.fit(train_sample, train_sample['target'])
p.predict(test_sample)
次のエラーで失敗します。
ValueError: shapes (1,7) and (18,) not aligned: 7 (dim 1) != 18 (dim 0)
これは、トレーニング サンプルがテスト サンプルよりも「大きい」ため、CountVectorizer ボキャブラリに含まれる機能が少ないためであることがわかります。しかし直感的には、パイプライン (およびその中の DataFrameMapper) が、表示される可能性のある欠損値を埋めてくれることを願っています。
この時点で、これが DFM の使用が間違っているためかどうかはわかりません。または、ばかげた構成手順が欠落している場合。
誰かがここで私のエラーを指摘してもらえますか?