web-dev-qa-db-ja.com

scikit学習の前処理-単一サンプル-非推奨の警告

UbuntuでAnacondaを新規インストールした場合... Scikit-Learnを使用した分類タスクの前に、さまざまな方法でデータを前処理しています。

from sklearn import preprocessing

scaler = preprocessing.MinMaxScaler().fit(train)
train = scaler.transform(train)    
test = scaler.transform(test)

これはすべてうまくいきますが、分類したい新しいサンプル(以下のtemp)がある場合(したがって、同じ方法で前処理したい場合は

temp = [1,2,3,4,5,5,6,....................,7]
temp = scaler.transform(temp)

その後、廃止の警告が表示されます...

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 
and will raise ValueError in 0.19. Reshape your data either using 
X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1)
if it contains a single sample. 

質問は、このような単一のサンプルをどのように再スケーリングする必要があるかということです。

代替案(あまり良いものではない)は...

temp = [temp, temp]
temp = scaler.transform(temp)
temp = temp[0]

しかし、もっと良い方法があると確信しています。

37
Chris Arthur

警告があなたに伝えていることを聞いてください:

データに単一のフィーチャー/列がある場合はX.reshape(-1、1)、単一のサンプルが含まれる場合はX.reshape(1、-1)のいずれかでデータを再形成します。

サンプルタイプの場合(複数の機能/列がある場合):

temp = temp.reshape(1,-1) 

1つの機能/列の場合:

temp = temp.reshape(-1,1)
31
Mike

まあ、実際には警告があなたに何をすべきかを伝えているように見えます。

sklearn.pipelineステージの統一インターフェイス の一部として、経験則として:

  • Xが表示されたら、2つのディメンションを持つnp.arrayである必要があります

  • yが表示されたら、単一のディメンションを持つnp.arrayである必要があります。

したがって、ここでは、次のことを考慮する必要があります。

temp = [1,2,3,4,5,5,6,....................,7]
# This makes it into a 2d array
temp = np.array(temp).reshape((len(temp), 1))
temp = scaler.transform(temp)
32
Ami Tavory

これは役立つかもしれません

temp = ([[1,2,3,4,5,6,.....,7]])
6
Bharath M

.values.reshape(-1,1)はアラート/警告なしで受け入れられます

.reshape(-1,1)は受け入れられますが、非推奨戦争が発生します

1
Analytics

いつでも次のように形を変えることができます:

temp = [1,2,3,4,5,5,6,7]

temp = temp.reshape(len(temp), 1)

なぜなら、主要な問題は、temp.shapeが次の場合:(8、)

そして、あなたは(8,1)が必要です

0

私は同じ問題に直面し、同じ非推奨の警告を受けました。メッセージを受け取ったとき、[23、276]のnumpy配列を使用していました。私は警告に従ってそれを再形成しようとしましたが、どこにも行きませんでした。次に、numpy配列から各行を選択し(とにかく繰り返し処理を行っていたため)、それをリスト変数に割り当てました。それは警告なしで動作しました。

array = []
array.append(temp[0])

その後、pythonリストオブジェクト(ここでは 'array')をsk-learn関数への入力として使用できます。最も効率的なソリューションではありませんが、私にとってはうまくいきました。

0
shan89