2008-12-13 12 views
11

यह थोड़ी देर के बाद से मैं कॉलेज में था और जानता था कि एक अच्छी फिट लाइन की गणना कैसे करें, लेकिन मुझे खुद को ढूंढने की आवश्यकता है। मान लीजिए मेरे पास अंक का एक सेट है, और मैं उन रेखाओं को ढूंढना चाहता हूं जो उन बिंदुओं में से सबसे अच्छे हैं।एक "सर्वश्रेष्ठ फिट" समीकरण खोजें

सर्वोत्तम फिट लाइन निर्धारित करने के लिए समीकरण क्या है? मैं PHP के साथ ऐसा कैसे करूं?

उत्तर

2

अतिरिक्त ब्याज की संभावना है कि लाइन के अनुरूप कितना अच्छा है। कि के लिए, पियर्सन सहसंबंध, यहाँ एक PHP समारोह में उपयोग करें:

/** 
* returns the pearson correlation coefficient (least squares best fit line) 
* 
* @param array $x array of all x vals 
* @param array $y array of all y vals 
*/ 

function pearson(array $x, array $y) 
{ 
    // number of values 
    $n = count($x); 
    $keys = array_keys(array_intersect_key($x, $y)); 

    // get all needed values as we step through the common keys 
    $x_sum = 0; 
    $y_sum = 0; 
    $x_sum_sq = 0; 
    $y_sum_sq = 0; 
    $prod_sum = 0; 
    foreach($keys as $k) 
    { 
     $x_sum += $x[$k]; 
     $y_sum += $y[$k]; 
     $x_sum_sq += pow($x[$k], 2); 
     $y_sum_sq += pow($y[$k], 2); 
     $prod_sum += $x[$k] * $y[$k]; 
    } 

    $numerator = $prod_sum - ($x_sum * $y_sum/$n); 
    $denominator = sqrt(($x_sum_sq - pow($x_sum, 2)/$n) * ($y_sum_sq - pow($y_sum, 2)/$n)); 

    return $denominator == 0 ? 0 : $numerator/$denominator; 
} 
+0

बीटीडब्ल्यू, पियरसन गुणांक 0 (कोई सहसंबंध) से 1.0 तक है (अंक सीधे रेखा पर झूठ बोलते हैं) – ruquay

0

अक्सर उपयोग किया जाने वाला दृष्टिकोण अपने बिंदुओं और फिट फ़ंक्शन के बीच स्क्वायर वाई-अंतरों के योग को कम करने के लिए होता है।

4

यद्यपि आप एक पुनरावृत्ति दृष्टिकोण का उपयोग कर सकते हैं, फिर भी आप कम से कम वर्ग दृष्टिकोण का उपयोग करके अवलोकनों के एक सेट को दी गई रेखा की ढलान और अवरोध की गणना कर सकते हैं। अंकों के दिए गए सेट y = a + bx में गुणांक a और b की गणना करने के लिए the Wikipedia article on linear regression के "यूनिवर्सेट लीनियर केस" अनुभाग को देखें।

6

यहां एक article डेटा की एक पंक्ति फिट करने के दो तरीकों की तुलना में है। एक बात यह देखने के लिए है कि एक प्रत्यक्ष समाधान है जो सिद्धांत में सही है लेकिन संख्यात्मक समस्याएं हो सकती हैं। लेख दिखाता है कि यह विधि क्यों विफल हो सकती है और एक और तरीका प्रदान करता है जो बेहतर है।

+1

+1 यह अभी तक का सबसे अच्छा जवाब से, अन्य विधि, बेहद घटिया है यद्यपि अधिक लोकप्रिय। – Muhd

2

विकी पेज से अनुपयुक्त, अनचाहे।

$sx = 0; 
$sy = 0; 
$sxy = 0; 
$sx2 = 0; 
$n = count($data); 
foreach ($data as $x => $y) 
{ 
    $sx += $x; 
    $sy += $y; 
    $sxy += $x * $y; 
    $sx2 += $x * $x; 
} 
$beta = ($n*$sxy - $sx*$sy)/($n*$sx2 - $sx*$sx); 
$alpha = $sy/$n - $sx*$beta/$n; 

echo "y = $alpha + $beta x"; 
संबंधित मुद्दे