我有號碼的以下列表:重標度數字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表示完全不合適,這就是爲什麼我想排除他們從最終結果。
任何幫助將不勝感激。
我有號碼的以下列表:重標度數字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表示完全不合適,這就是爲什麼我想排除他們從最終結果。
任何幫助將不勝感激。
我不確定我是否理解你的問題,但找到該集合中的最大數字,並將該集合中的每個數字除以該最大數字將會給你一個合適的範圍。
使用你所陳述的公式:8.25是列表中的最大值。如果我將每個數字除以最大值,我將獲得8.25的重新縮放值1。我需要8.25的重新縮放值接近1但不是1(例如0.99,0.999等)。 –
是的,所以你可以使用該數字來獲得合適的範圍。當然,你的最高數字將是1,但你可以使用epsilon值來解決這個問題。 –
謝謝。這就是我一直在尋找的。 –
你可能想仿射映射(即形式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 + eps
和not_quite_1 = 1 - eps
,其中eps
是一些非常非常小的值。
明白了。非常感謝。 –
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 - 對於範圍,您需要爲最小值添加兩次,因爲您需要在範圍的每一端添加填充。
此轉換是否有幫助?
V' = 1/(1 + e^(-V)) -------- Logistic function
域 - 真實號碼,以便V
可以採取任何實際價值
Range - (0,1)
,這樣,與0<V'<1
,V'<>0
和V'<>1
你能否考慮編輯你的答案? – eeerahul
你具有這部分的麻煩? –
你想要一個線性或仿射變換嗎?即'a * x'或'a * x + b'? –
在我看來,最簡單的做法是(分配'max = 8.25'),你的價值將類似於 'x'= x /(max + epsilon)' 其中'x'是你的原始值(3.16,4.72)和'x'是縮放值,而'epsilon'是一個非零的小數字(以便'max /(max + epsilon)!= 1')。 從本質上講,你將正規化你的數據集相對於'max',我相信它是以你想要的方式重新縮放的定義。 – mzhang