में कुशल एकाधिक रैखिक रिग्रेशन क्या किसी को सी # में एकाधिक रैखिक प्रतिगमन करने का एक प्रभावी तरीका पता है, जहां एक साथ समीकरणों की संख्या 1000 के (3 या 4 अलग-अलग इनपुट के साथ) हो सकती है।सी #/.NET
Matrix y = new Matrix(
new double[,]{{745},
{895},
{442},
{440},
{1598}});
Matrix x = new Matrix(
new double[,]{{1, 36, 66},
{1, 37, 68},
{1, 47, 64},
{1, 32, 53},
{1, 1, 101}});
Matrix b = (x.Transpose() * x).Inverse() * x.Transpose() * y;
for (int i = 0; i < b.Rows; i++)
{
Trace.WriteLine("INFO: " + b[i, 0].ToDouble());
}
हालांकि यह मैट्रिक्स उलट ऑपरेशन के कारण समीकरणों के 1000 के पैमाने पर करने के साथ-साथ बड़े पैमाने नहीं करता है: कई रेखीय प्रतीपगमन पर this article पढ़ने के बाद मैं एक मैट्रिक्स समीकरण के साथ लागू करने की कोशिश की। मैं आर भाषा को कॉल कर सकता हूं और इसका उपयोग कर सकता हूं, हालांकि मैं उम्मीद कर रहा था कि एक शुद्ध नेट समाधान होगा जो इन बड़े सेटों को स्केल करेगा।
कोई सुझाव?
संपादित करें # 1:
मैं कुछ समय के लिए आर का उपयोग कर बस गए। Statconn का उपयोग करके (डाउनलोड here) मैंने पाया है कि यह तेजी से & दोनों इस विधि का उपयोग करने के लिए अपेक्षाकृत आसान है। अर्थात। यहां एक छोटा कोड स्निपेट है, यह वास्तव में आर statconn पुस्तकालय का उपयोग करने के लिए बहुत अधिक कोड नहीं है (नोट: यह सभी कोड नहीं है!)।
_StatConn.EvaluateNoReturn(string.Format("output <- lm({0})", equation));
object intercept = _StatConn.Evaluate("coefficients(output)['(Intercept)']");
parameters[0] = (double)intercept;
for (int i = 0; i < xColCount; i++)
{
object parameter = _StatConn.Evaluate(string.Format("coefficients(output)['x{0}']", i));
parameters[i + 1] = (double)parameter;
}
उपयोग शायद एक GPU पुस्तकालय? –
क्या आप मैट्रिक्स ऑपरेशंस को तेज़ी से चलाने का मतलब रखते हैं? मुझे नहीं लगता कि यह सबसे अच्छा तरीका होगा, मुझे लगता है कि एक गैर-मैट्रिक्स शैली दृष्टिकोण (या कुछ जो उलटा से बचाता है) का उपयोग करना सबसे अच्छा तरीका होगा। – mike
मुझे सफलता मिली है http://www.codeproject.com/KB/recipes/LinReg.aspx उपयोग करने के लिए बहुत आसान और खुला स्रोत! – BoroDrummer