複数列のデータに対してStandardScalerのfit_transformを適用した後、
1列のデータに対してinverse_transformを適用したい
python
1from sklearn.preprocessing import StandardScaler 2 3a=[[0,1,2,3,4],[2,2,2,3,4],[1,1,1,5,1],[1,5,6,4,1],[1,3,3,4,1]] 4sc_ = StandardScaler() 5a_std =sc_.fit_transform(a) 6 7#一般的な使い方 8b_std = [[0, 0.1, 0.2 , 0.3, 0.4]] 9b = sc_.inverse_transform(b_std) 10 11#やりたいこと 12v_last_std = [0.4] 13v_last = sc_.inverse_transform(v_last_std) 14print(v_last) 15 16#fit_transformしたときと配列の大きさが異なるので、当然エラーになります 17
無理やり書くと2通りでやりたいことは出来ましたが、もっときれいに書く方法はありますでしょうか。
1.元の配列と列数が等しい0行列を準備してから置換する。
2.fit_transform時に、目的の列だけ別にStandardScalerを準備する。
どちらも動きはしますが、あまり美しいとは思えません。。
python
1#1 2tmp_std = [0] * 5 3tmp_std[-1] = v_last_std[0] 4 5tmp = sc_.inverse_transform(tmp_std) 6v_last = tmp[-1] 7print(v_last) 8 9#2 10sc_last = StandardScaler() 11a_last = [(i[-1],) for i in a] 12print(a_last) 13a_last_std = sc_last.fit_transform(a_last) 14 15print(a_last_std) 16 17v_last = sc_last.inverse_transform(v_last_std)[0] 18print(v_last) 19
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。