කරුණාකර මට මග පෙන්වීමට කිසිවෙකුට හැකිද?
මට අවම සහ උපරිම අගයන් ඇත, පිළිවෙලින් -23.89 සහ 7.54990767 කියන්න.
මට 5.6878 ක අගයක් ලැබෙන්නේ නම්, මෙම අගය 0 සිට 1 දක්වා පරිමාණයකින් පරිමාණය කරන්නේ කෙසේද?
කරුණාකර මට මග පෙන්වීමට කිසිවෙකුට හැකිද?
මට අවම සහ උපරිම අගයන් ඇත, පිළිවෙලින් -23.89 සහ 7.54990767 කියන්න.
මට 5.6878 ක අගයක් ලැබෙන්නේ නම්, මෙම අගය 0 සිට 1 දක්වා පරිමාණයකින් පරිමාණය කරන්නේ කෙසේද?
Answers:
ඔබේ දත්ත සාමාන්යකරණය කිරීමට ඔබට අවශ්ය නම්, ඔබට යෝජනා කළ පරිදි එය කළ හැකි අතර පහත සඳහන් දේ සරලව ගණනය කරන්න:
එහිදී හා දැන් ඔබගේ සාමාන්යකරණයට දත්ත. සංකල්පයේ සාක්ෂියක් ලෙස (ඔබ එය ඉල්ලා නොසිටියද) මෙම කරුණ නිරූපණය කිරීම සඳහා කේත කිහිපයක් සහ ඒ සමඟ ඇති ප්රස්ථාරයක් මෙහි ඇත:R
# Example Data
x = sample(-100:100, 50)
#Normalized Data
normalized = (x-min(x))/(max(x)-min(x))
# Histogram of example data and normalized data
par(mfrow=c(1,2))
hist(x, breaks=10, xlab="Data", col="lightblue", main="")
hist(normalized, breaks=10, xlab="Normalized Data", col="lightblue", main="")
illustrate the point
ඔබේ (නිවැරදි) පිළිතුරට වඩා වෙනස් පෙනුමක් ඇති හිස්ටෝග්රැම් දෙක කරන්නේ කෙසේදැයි මම කල්පනා කරමි.
මිනි සහ උපරිම නව අත්තනෝමතික පරාසයකට මිනි ' සිට මැක්ස්' දක්වා ඇති දත්ත අගයන් රේඛීයව යථා තත්වයට පත් කිරීමේ සාමාන්ය එක්-පේළි සූත්රය වේ.
newvalue= (max'-min')/(max-min)*(value-max)+max'
or
newvalue= (max'-min')/(max-min)*(value-min)+min'.
a
හා b
නියතයන් සිදු කර පසුව අදාළ newvalue = a * value + b
වේ. a = (max'-min')/(max-min)
සහb = max - a * max
b = max' - a * max
හෝb = min' - (a * min)
u = -1 + 2.*(u - min(u))./(max(u) - min(u));
.
සාමාන්යකරණය සඳහා මගේ PHP ක්රියාත්මක කිරීම මෙන්න:
function normalize($value, $min, $max) {
$normalized = ($value - $min) / ($max - $min);
return $normalized;
}
නමුත් මම මගේම කෘතිම ස්නායුක ජාලයක් ගොඩනඟමින් සිටියදී, ප්රස්ථාරය සඳහා හොඳ කියවිය හැකි ප්රතිදානයක් ලබා ගැනීම සඳහා සාමාන්යකරණය කළ ප්රතිදානය නැවත මුල් දත්ත බවට පරිවර්තනය කිරීමට මට අවශ්ය විය.
function denormalize($normalized, $min, $max) {
$denormalized = ($normalized * ($max - $min) + $min);
return $denormalized;
}
$int = 12;
$max = 20;
$min = 10;
$normalized = normalize($int, $min, $max); // 0.2
$denormalized = denormalize($normalized, $min, $max); //12
අවලංගු කිරීම පහත සූත්රය භාවිතා කරයි:
මතක තබා ගත යුතු එක් දෙයක් නම් එය max - min
ශුන්යයට සමාන විය හැකිය. මෙම අවස්ථාවේ දී, ඔබට එම අංශය සිදු කිරීමට අවශ්ය නොවනු ඇත.
මෙය සිදුවිය හැකි අවස්ථාව වන්නේ ඔබ සාමාන්යකරණය කිරීමට උත්සාහ කරන ලැයිස්තුවේ ඇති සියලුම අගයන් එක හා සමාන වන විට ය. එවැනි ලැයිස්තුවක් සාමාන්යකරණය කිරීම සඳහා, සෑම අයිතමයක්ම වනු ඇත 1 / length
.
// JavaScript
function normalize(list) {
var minMax = list.reduce((acc, value) => {
if (value < acc.min) {
acc.min = value;
}
if (value > acc.max) {
acc.max = value;
}
return acc;
}, {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY});
return list.map(value => {
// Verify that you're not about to divide by zero
if (minMax.max === minMax.min) {
return 1 / list.length
}
var diff = minMax.max - minMax.min;
return (value - minMax.min) / diff;
});
}
normalize([3, 3, 3, 3]); // output => [0.25, 0.25, 0.25, 0.25]
normalize([12, 20, 10])
ප්රතිදානයන් [0.2, 1.0, 0.0]
, එය ඔබට ලැබෙනු ඇත (val - min) / (max - min)
.
මේක උත්සාහ කරන්න. එය ශ්රිත පරිමාණයට අනුරූප වේ
normalize <- function(x) {
x <- as.matrix(x)
minAttr=apply(x, 2, min)
maxAttr=apply(x, 2, max)
x <- sweep(x, 2, minAttr, FUN="-")
x=sweep(x, 2, maxAttr-minAttr, "/")
attr(x, 'normalized:min') = minAttr
attr(x, 'normalized:max') = maxAttr
return (x)
}
පිළිතුර හරි නමුත් මට යෝජනාවක් තිබේ, ඔබේ පුහුණු දත්ත යම් පරාසයකින් ඔබ්බට ගියහොත් කුමක් කළ යුතුද? ඔබට ස්කොෂිං තාක්ෂණය භාවිතා කළ හැකිය. කිසි විටෙකත් පරාසයෙන් පිටතට නොයන බවට සහතික වනු ඇත. මේ වෙනුවට
මෙය භාවිතා කිරීමට මම නිර්දේශ කරමි
මිනිත්තු සහ උපරිම පරාසය තුළ මේ ආකාරයට ස්කොෂ් කිරීම සමඟ
සහ අපේක්ෂිත පරාසයෙන් පිටත පරතරයේ ප්රමාණය පරාසය ඉක්මවා යන අගයන් ඇති බවට විශ්වාසයේ මට්ටමට කෙලින්ම සමානුපාතික වේ.
වැඩි විස්තර සඳහා ඔබට ගූගල් කළ හැකිය: පරාසයෙන් පිටත අංක වර්ග කිරීම සහ "ඩෝරියන් පයිල්" හි දත්ත සැකසීමේ පොත වෙත යොමු වන්න.