Có ai biết cách hiệu quả để thực hiện hồi quy tuyến tính nhiều trong C#, trong đó số phương trình đồng thời có thể trong 1000 (với 3 hoặc 4 đầu vào khác nhau). Sau khi đọc this article trên hồi quy tuyến tính nhiều tôi đã cố gắng thực hiện nó với một phương trình ma trận:Hồi quy tuyến tính đa hiệu quả trong C#/.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());
}
Tuy nhiên nó cũng không quy mô với quy mô của năm 1000 của phương trình do các hoạt động ma trận nghịch đảo. Tôi có thể gọi ngôn ngữ R và sử dụng ngôn ngữ đó, tuy nhiên tôi hy vọng sẽ có một giải pháp thuần túy .Net sẽ mở rộng quy mô cho những tập hợp lớn này.
Mọi đề xuất?
EDIT # 1:
tôi đã giải quyết bằng R trong thời gian này. Bằng cách sử dụng statconn (tải về here) Tôi đã tìm thấy nó là cả hai nhanh chóng & tương đối dễ sử dụng phương pháp này. I E. đây là một đoạn mã nhỏ, nó thực sự không phải là nhiều mã ở tất cả để sử dụng thư viện R statconn (lưu ý: đây không phải là tất cả các mã!).
_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;
}
sử dụng một thư viện GPU có lẽ? –
Bạn có nghĩa là để làm cho các hoạt động ma trận chạy nhanh hơn? Tôi không nghĩ rằng đó sẽ là cách tiếp cận tốt nhất, tôi nghĩ cách tiếp cận tốt nhất sẽ là sử dụng một cách tiếp cận không theo kiểu ma trận (hoặc cái gì đó tránh được nghịch đảo). – mike
Tôi đã thành công với http://www.codeproject.com/KB/recipes/LinReg.aspx Rất dễ sử dụng và nguồn mở! – BoroDrummer