teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

924閲覧

scikit.learnで2個のarray配列を合わせて標準化したい

kazuhira

総合スコア10

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/21 09:59

0

0

前提・実現したいこと

scikit.learnで2個のarray配列を合わせて標準化したい。

試したこと

import numpy as np
from sklearn.preprocessing import StandardScaler

test1 = np.array([[0.6,0.68,0.65,0.74],[0.59,0.66,0.67,0.73]])
test2 = np.array([[0.61,0.67,0.64,0.75],[0.58,0.67,0.68,0.72]])
test3 = np.array([[0.6,0.68,0.65,0.74],[0.59,0.66,0.67,0.73],[0.61,0.67,0.64,0.75],[0.58,0.67,0.68,0.72]])
scaler = StandardScaler()

norm1 = scaler.fit_transform(test1)

norm1
array([[ 1., 1., -1., 1.],
[-1., -1., 1., -1.]])

norm2 = scaler.fit_transform(test2)

norm2
array([[ 1., 0., -1., 1.],
[-1., 0., 1., -1.]])

norm3 = scaler.fit_transform(test3)

norm3
array([[ 0.4472136 , 1.41421356, -0.63245553, 0.4472136 ],
[-0.4472136 , -1.41421356, 0.63245553, -0.4472136 ],
[ 1.34164079, 0. , -1.26491106, 1.34164079],
[-1.34164079, 0. , 1.26491106, -1.34164079]]) 

となるのはわかりました。
そこで、
test1 = np.array([[0.6,0.68,0.65,0.74],[0.59,0.66,0.67,0.73]])
test2 = np.array([[0.61,0.67,0.64,0.75],[0.58,0.67,0.68,0.72]])
scaler = StandardScaler()
norm1,norm2 = scaler.fit_transform(test1,test2)

norm1
array([ 0.4472136 , 1.41421356, -0.63245553, 0.4472136 ],
[-0.4472136 , -1.41421356, 0.63245553, -0.4472136 ])

norm2
array([ 1.34164079, 0. , -1.26491106, 1.34164079],
[-1.34164079, 0. , 1.26491106, -1.34164079])

となることを期待していましたがこうなりませんでした。
初心者の質問で申し訳ないですが解決方法がありましたらよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/06/21 13:13

scikit.learnよりscikit-learnが正確です。お時間の都合がつくときにでも修正しておいてください。
guest

回答3

0

fittransformをわけて実行すればよいと思います。
今回はStandardScaler.partial_fit()を使えば、複数のデータをもとにするScalerが作成できそうです。

python

1scaler = StandardScaler() 2scaler.partial_fit(test1) 3scaler.partial_fit(test2) 4 5norm1 = scaler.transform(test1) 6norm2 = scaler.transform(test2)

投稿2019/06/22 02:18

bsdfan

総合スコア4920

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/06/22 03:41

StandardScalerにpartial_fitあったんですね!
guest

0

一行で。

python

1import numpy as np 2from sklearn.preprocessing import StandardScaler 3 4test1 = np.array([[0.6, 0.68, 0.65, 0.74], [0.59, 0.66, 0.67, 0.73]]) 5test2 = np.array([[0.61, 0.67, 0.64, 0.75], [0.58, 0.67, 0.68, 0.72]]) 6 7scaler = StandardScaler() 8result1, result2 = np.split(scaler.fit_transform(np.vstack([test1, test2])), len(test1), axis=0) 9print(result1) 10print(result2) 11

投稿2019/06/21 13:13

hayataka2049

総合スコア30939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuhira

2019/06/22 03:47

本当にありがとうございました。 無事に解決することができました。
guest

0

ベストアンサー

以下のようにすればよいと思います。

手順

(N, L), (M, L) の2つの行列があった場合、

  1. 縦 (axis=0) で連結して、(N + M, L) の行列にする。
  2. 標準化する。
  3. 結果の(N + M, L) の行列を (N, L), (M, L) の2つの行列に戻す。

サンプルコード

python

1import numpy as np 2from sklearn.preprocessing import StandardScaler 3 4test1 = np.array([[0.6, 0.68, 0.65, 0.74], [0.59, 0.66, 0.67, 0.73]]) 5test2 = np.array([[0.61, 0.67, 0.64, 0.75], [0.58, 0.67, 0.68, 0.72]]) 6 7# 縦に連結する。 8concat = np.vstack((test1, test2)) 9print(concat) 10# [[0.6 0.68 0.65 0.74] 11# [0.59 0.66 0.67 0.73] 12# [0.61 0.67 0.64 0.75] 13# [0.58 0.67 0.68 0.72]] 14 15scaler = StandardScaler() 16scaled = scaler.fit_transform(concat) 17 18# 連結したのを元に戻す。 19scaled1 = scaled[:len(test1)] 20scaled2 = scaled[len(test1):] 21print(scaled1) 22# [[ 0.4472136 1.41421356 -0.63245553 0.4472136 ] 23# [-0.4472136 -1.41421356 0.63245553 -0.4472136 ]] 24 25print(scaled2) 26# [[ 1.34164079 0. -1.26491106 1.34164079] 27# [-1.34164079 0. 1.26491106 -1.34164079]]

投稿2019/06/21 10:16

tiitoi

総合スコア21960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuhira

2019/06/22 03:46

本当にありがとうございました。 とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問