से थोड़ा संशोधित: पायथन पंडस डेटाफ्रेम: 0.01 और 0.99 के बीच डेटा को सामान्य करें? लेकिन कुछ टिप्पणियों से लगा कि यह प्रासंगिक है (खेद है कि अगर एक repost हालांकि माना जाता है ...)
मैं चाहता था कि डेटम या जेड-स्कोर के नियमित प्रतिशत में सामान्यीकरण अनुकूलित हो। कभी-कभी मुझे पता होता था कि जनसंख्या की संभाव्य अधिकतम और न्यूनतम राशि क्या है, और इसलिए मैं इसे अपने नमूने के अलावा, या एक अलग मिडपॉइंट, या जो कुछ भी परिभाषित करना चाहता था! यह अक्सर तंत्रिका जाल के लिए डेटा को बदलने और सामान्य करने के लिए उपयोगी हो सकता है, जहां आप 0 और 1 के बीच सभी इनपुट चाहते हो सकते हैं, लेकिन आपके कुछ डेटा को अधिक अनुकूलित तरीके से स्केल करने की आवश्यकता हो सकती है ... क्योंकि प्रतिशत और stdevs अपना नमूना कवर मान लेते हैं जनसंख्या, लेकिन कभी-कभी हम जानते हैं कि यह सच नहीं है। हीटमैप में डेटा की कल्पना करते समय यह मेरे लिए भी बहुत उपयोगी था। इसलिए मैंने एक कस्टम फ़ंक्शन बनाया (इसे यथासंभव पठनीय बनाने के लिए कोड में अतिरिक्त चरणों का उपयोग किया गया):
def NormData(s,low='min',center='mid',hi='max',insideout=False,shrinkfactor=0.):
if low=='min':
low=min(s)
elif low=='abs':
low=max(abs(min(s)),abs(max(s)))*-1.#sign(min(s))
if hi=='max':
hi=max(s)
elif hi=='abs':
hi=max(abs(min(s)),abs(max(s)))*1.#sign(max(s))
if center=='mid':
center=(max(s)+min(s))/2
elif center=='avg':
center=mean(s)
elif center=='median':
center=median(s)
s2=[x-center for x in s]
hi=hi-center
low=low-center
center=0.
r=[]
for x in s2:
if x<low:
r.append(0.)
elif x>hi:
r.append(1.)
else:
if x>=center:
r.append((x-center)/(hi-center)*0.5+0.5)
else:
r.append((x-low)/(center-low)*0.5+0.)
if insideout==True:
ir=[(1.-abs(z-0.5)*2.) for z in r]
r=ir
rr =[x-(x-0.5)*shrinkfactor for x in r]
return rr
यह एक पांडा श्रृंखला में, या यहां तक कि सिर्फ एक सूची में ले जाएगा और इसे आपके निर्दिष्ट कम, केंद्र और उच्च बिंदुओं पर सामान्य कर देगा। भी एक हटना कारक है! आपको डेटा को एंडपॉइंट 0 और 1 से दूर करने की अनुमति देने के लिए ( मैटप्लोटलिब में कॉलोर्मैप्स को मिलाते समय मुझे ऐसा करना पड़ा था: मैटलपोटलिब का उपयोग करते हुए एक से अधिक कॉलोरामैप के साथ एकल पीसीओलेर्मेश ) तो आप संभावना कर सकते हैं कि कोड कैसे काम करता है, लेकिन मूल रूप से आप कहते हैं एक नमूने में [-5,1,10] मान हैं, लेकिन -7 से 7 की सीमा के आधार पर सामान्य करना चाहते हैं (7 से ऊपर कुछ भी, हमारे "10" को 7 के प्रभावी रूप से 2 के मध्य बिंदु के साथ माना जाता है) लेकिन इसे एक 256 आरजीबी कॉलॉर्मैप फिट करने के लिए सिकोड़ें:
#In[1]
NormData([-5,2,10],low=-7,center=1,hi=7,shrinkfactor=2./256)
#Out[1]
[0.1279296875, 0.5826822916666667, 0.99609375]
यह आपके डेटा को बाहर भी चालू कर सकता है ... यह अजीब लग सकता है, लेकिन मैंने इसे हीटमैपिंग के लिए उपयोगी पाया। कहते हैं कि आप उच्च / कम के बजाय 0 के करीब मूल्यों के लिए एक गहरा रंग चाहते हैं। आप सामान्यीकृत डेटा के आधार पर हीटमैप कर सकते हैं जहां अंदर = सत्य:
#In[2]
NormData([-5,2,10],low=-7,center=1,hi=7,insideout=True,shrinkfactor=2./256)
#Out[2]
[0.251953125, 0.8307291666666666, 0.00390625]
तो अब "2" जो केंद्र के सबसे करीब है, "1" के रूप में परिभाषित किया गया है उच्चतम मूल्य है।
वैसे भी, मुझे लगा कि मेरा आवेदन प्रासंगिक था यदि आप अन्य तरीकों से डेटा को फिर से बेचना चाहते हैं जो आपके लिए उपयोगी अनुप्रयोग हो सकते हैं।
A
औरB
एक बड़े समूहन कारक का हिस्सा है जिसे आप अलग सेC
और सामान्य करना चाहते हैंD
।