2014-07-13 7 views
7

की तुलना में थोड़ा अलग परिणाम उत्पन्न करता है मैंने न्यूमपी का उपयोग करके "मैनुअल" दृष्टिकोण के साथ preprocessing मॉड्यूल से विज्ञान-सीखने वाले मिनी-मैक्स स्केलर की तुलना की। हालांकि, मैंने देखा कि परिणाम थोड़ा अलग है। क्या किसी के पास इसके लिए स्पष्टीकरण है?scikit-learn MinMaxScaler NumPy Implemantation

मिन-मैक्स स्केलिंग के लिए निम्न समीकरण का उपयोग करना:

enter image description here

जो के रूप में एक scikit सीखने एक ही होना चाहिए: (X - X.min(axis=0))/(X.max(axis=0) - X.min(axis=0))

मैं उपयोग कर रहा हूँ दोनों दृष्टिकोण इस प्रकार है:

def numpy_minmax(X): 
    xmin = X.min() 
    return (X - xmin)/(X.max() - xmin) 

def sci_minmax(X): 
    minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True) 
    return minmax_scale.fit_transform(X) 

यादृच्छिक नमूना पर:

import numpy as np 

np.random.seed(123) 

# A random 2D-array ranging from 0-100 

X = np.random.rand(100,2) 
X.dtype = np.float64 
X *= 100 

परिणाम थोड़े अलग हैं:

from matplotlib import pyplot as plt 

sci_mm = sci_minmax(X) 
numpy_mm = numpy_minmax(X) 

plt.scatter(numpy_mm[:,0], numpy_mm[:,1], 
     color='g', 
     label='NumPy bottom-up', 
     alpha=0.5, 
     marker='o' 
     ) 

plt.scatter(sci_mm[:,0], sci_mm[:,1], 
     color='b', 
     label='scikit-learn', 
     alpha=0.5, 
     marker='x' 
     ) 

plt.legend() 
plt.grid() 

plt.show() 

enter image description here

उत्तर

10

scikit-learn प्रक्रियाओं को एक व्यक्तिगत रूप से शामिल हैं। तो, आप जब min लेने axis=0 निर्दिष्ट करने की आवश्यकता है, अन्यथा numpy.min मिनट पर सभी सरणी के तत्वों, नहीं अलग से प्रत्येक स्तंभ होगा:

>>> xs 
array([[1, 2], 
     [3, 4]]) 
>>> xs.min() 
1 
>>> xs.min(axis=0) 
array([1, 2]) 

numpy.max के लिए एक ही बात; इसलिए सही समारोह होगा:

exact match

+1

बहुत बढ़िया है, धन्यवाद:

def numpy_minmax(X): xmin = X.min(axis=0) return (X - xmin)/(X.max(axis=0) - xmin) 

ऐसा करने से आपको कोई सटीक मिलान प्राप्त होगा! – Sebastian

 संबंधित मुद्दे