2011-08-29 74 views
0

我有號碼的以下列表:重標度數字0和1之間

3.16,4.72,6.44,8.25,3.76,4.87,5.76,6.5,7.32

我不得不重新調整之間的數字( 0,1),使得:

1)的最小數目得到最接近於0但不爲0。

2)最大數量獲得的值的值最接近於1但不1.

0一世ñ我的研究表明完全合適,1表示完全不合適,這就是爲什麼我想排除他們從最終結果。

任何幫助將不勝感激。

+2

你具有這部分的麻煩? –

+1

你想要一個線性或仿射變換嗎?即'a * x'或'a * x + b'? –

+0

在我看來,最簡單的做法是(分配'max = 8.25'),你的價值將類似於 'x'= x /(max + epsilon)' 其中'x'是你的原始值(3.16,4.72)和'x'是縮放值,而'epsilon'是一個非零的小數字(以便'max /(max + epsilon)!= 1')。 從本質上講,你將正規化你的數據集相對於'max',我相信它是以你想要的方式重新縮放的定義。 – mzhang

回答

0

我不確定我是否理解你的問題,但找到該集合中的最大數字,並將該集合中的每個數字除以該最大數字將會給你一個合適的範圍。

+0

使用你所陳述的公式:8.25是列表中的最大值。如果我將每個數字除以最大值,我將獲得8.25的重新縮放值1。我需要8.25的重新縮放值接近1但不是1(例如0.99,0.999等)。 –

+0

是的,所以你可以使用該數字來獲得合適的範圍。當然,你的最高數字將是1,但你可以使用epsilon值來解決這個問題。 –

+0

謝謝。這就是我一直在尋找的。 –

0

你可能想仿射映射(即形式y = mx + c的),使得:

not_quite_0 = m*min_val + c 
not_quite_1 = m*max_val + c 

解決這些方程,你會得到:

m = (not_quite_1 - not_quite_0)/(max_val - min_val) 
c = (max_val*not_quite_0 - min_val*not_quite_1)/(max_val - min_val) 

你或許可以定義not_quite_0 = 0 + epsnot_quite_1 = 1 - eps,其中eps是一些非常非常小的值。

+0

明白了。非常感謝。 –

0

Python中一個簡單的例子,使用仿射變換:

list = [3.16, 4.72, 6.44, 8.25, 3.76, 4.87, 5.76, 6.5, 7.32] 

# find the minimum value and range, and add 1% padding 
range_value = max(list) - min(list) 
range_value = range_value + range_value/50 
min_value = min(list) - range_value/100  

# subtract the minimum value and divide by the range 
for index, item in enumerate(list): 
    list[index] = (item - min_value)/range_value 

print list 

給出結果:

[0.010000000000000026, 0.310473824107246, 0.64176547632805592, 0.99039215686274518, 0.1255668554258639, 0.33936553796371205, 0.51078970684541003, 0.65332216187064218, 0.81126353095265591] 

你可以,當然,改變的填充量要像你一樣小'd like - 對於範圍,您需要爲最小值添加兩次,因爲您需要在範圍的每一端添加填充。

2

此轉換是否有幫助?

V' = 1/(1 + e^(-V)) -------- Logistic function 


域 - 真實號碼,以便V可以採取任何實際價值
Range - (0,1),這樣,與0<V'<1V'<>0V'<>1

+1

你能否考慮編輯你的答案? – eeerahul

相關問題