>

다음과 같은 numpy 배열이 있습니다 :

foo = np.array([[0.0, 10.0], [0.13216, 12.11837], [0.25379, 42.05027], [0.30874, 13.11784]])

다음을 산출합니다 :

[[  0.       10.     ]
 [  0.13216  12.11837]
 [  0.25379  42.05027]
 [  0.30874  13.11784]]

이 배열의 Y 구성 요소를 어떻게 정규화 할 수 있습니까? 그래서 그것은 나에게 다음과 같은 것을 준다 :

[[  0.       0.   ]
 [  0.13216  0.06 ]
 [  0.25379  1    ]
 [  0.30874  0.097]]

  • 답변 # 1

    이 Cross Validated Link, 데이터를 0-1 범위로 정규화하는 방법을 참조하면 foo 의 마지막 열에서 최소 최대 정규화를 수행 할 수있는 것처럼 보입니다. .

    v = foo[:, 1]   # foo[:, -1] for the last column
    foo[:, 1] = (v - v.min()) / (v.max() - v.min())
    
    

    foo
    array([[ 0.        ,  0.        ],
           [ 0.13216   ,  0.06609523],
           [ 0.25379   ,  1.        ],
           [ 0.30874   ,  0.09727968]])
    
    

    <시간>

    OP가 제안한 정규화를 수행하는 또 다른 옵션은 sklearn.preprocessing.normalize 를 사용하는 것입니다. , 약간 다른 결과가 나타납니다-

    from sklearn.preprocessing import normalize
    foo[:, [-1]] = normalize(foo[:, -1, None], norm='max', axis=0)
    
    

    foo
    array([[ 0.        ,  0.2378106 ],
           [ 0.13216   ,  0.28818769],
           [ 0.25379   ,  1.        ],
           [ 0.30874   ,  0.31195614]])
    
    

  • 답변 # 2

    당신이 이것을 원한다고 생각합니다 :

    foo[:,1] = (foo[:,1] - foo[:,1].min()) / (foo[:,1].max() - foo[:,1].min())
    
    

  • 답변 # 3

    sklearn.preprocessing.MinMaxScaler도 사용할 수 있습니다 ( feature_range=(0, 1)  기본값입니다) :

    from sklearn import preprocessing
    min_max_scaler = preprocessing.MinMaxScaler()
    v = foo[:,1]
    v_scaled = min_max_scaler.fit_transform(v)
    foo[:,1] = v_scaled
    print(foo)
    
    

    출력 :

    [[ 0.          0.        ]
     [ 0.13216     0.06609523]
     [ 0.25379     1.        ]
     [ 0.30874     0.09727968]]
    
    

    장점은 모든 범위로 확장 할 수 있다는 것입니다.

  • 답변 # 4

    두 번째 열만 0에서 1 사이의 최소-최대 스케일을 시도하고 있습니다.

    sklearn.preprocessing.minmax_scale 사용 문제를 쉽게 해결해야합니다.

    예 :

    from sklearn.preprocessing import minmax_scale
    column_1 = foo[:,0] #first column you don't want to scale
    column_2 = minmax_scale(foo[:,1], feature_range=(0,1)) #second column you want to scale
    foo_norm = np.stack((column_1, column_2), axis=1) #stack both columns to get a 2d array
    
    

    수율이어야한다

    array([[0.        , 0.        ],
           [0.13216   , 0.06609523],
           [0.25379   , 1.        ],
           [0.30874   , 0.09727968]])
    
    

    <시간>

    두 열 모두 0에서 1 사이의 최소-최대 스케일을 원할 수 있습니다. 이 경우 다음을 사용하십시오 :

    foo_norm = minmax_scale(foo, feature_range=(0,1), axis=0)
    
    

    어떤 수확량

    array([[0.        , 0.        ],
           [0.42806245, 0.06609523],
           [0.82201853, 1.        ],
           [1.        , 0.09727968]])
    
    

    참고: 벡터의 표준 (길이)을 특정 값 (일반적으로 1)으로 조정하는 연산과 혼동하지 마십시오. 일반적으로 정규화라고도합니다.

  • 이전 Angular 7에서 부트 스트랩 모달을 수정하는 방법은 무엇입니까?
  • 다음 algorithm - 맵에서 값을 업데이트하는 빠른 방법