Изменения

Перейти к: навигация, поиск

Линейная регрессия

1323 байта добавлено, 14:58, 25 февраля 2020
Матричные обозначения: Изменил индекс последнего члена вектора коэффициентов с l на n
f_1(x_1) & \dots & f_n(x_1) \\
\dots & \dots & \dots \\
f_nf_1(x_1x_l) & \dots & f_n(x_l)
\end{pmatrix}
,
\alpha_1 \\
\dots \\
\alpha_lalpha_n
\end{pmatrix}
Найдем псевдо-обратную матрицу: <br> <tex> F^+ = (U D V^T V D U^T)^{-1} U D V^T = U D^{-1} V^T = \sum\limits_{j=1}^n \frac{ 1 }{ \sqrt{ \lambda_j } } u_j v_j^T </tex>.
Теперь , зная псевдо-обратную матрицу, найдем решение задачи наименьших квадратов: <br> <tex> \alpha^* = F^+ y = U D^{-1} V^T y = \sum\limits_{j=1}^n \frac{ 1 }{ \sqrt{ \lambda_j } } u_j (v_j^T y) </tex>.
Найдем вектор, которым наша линейная модель аппроксимирует целевой вектор <tex> y </tex>: <br> <tex> F \alpha^* = P_F y = (V D U^T) U D^{-1} V^T y = V V^T y = \sum\limits_{j=1}^n v_j (v_j^T y) </tex>.
== Проблема мультиколлинеарности и переобучения ==
Если имеются сингулярные числа, близкие к 0, то:
* матрица <tex> \sum = F^T F </tex> плохо обусловлена;
* преобразование признаков, чтобы в новом признаковом пространстве признаков оказалось меньше, но они хорошо восстанавливали бы исходные: <br> <tex> f_1, \dots, f_n \rightarrow g_1 \dots, g_m, m \ll n </tex>.
==Примеры кода===== Пример кода для Scikit-learn ===
'''import''' matplotlib.pyplot '''as''' plt
[[Файл: Linear_regression_example.png]]
 
===Пример на языке Java===
Пример линейной регресии с применением <code>weka.classifiers.functions.LinearRegression</code><ref>[http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/LinearRegression.html/ Weka, Linear Regression]</ref>
 
<code>Maven</code> зависимомсть:
<dependency>
<groupId>nz.ac.waikato.cms.weka</groupId>
<artifactId>weka-stable</artifactId>
<version>3.8.0</version>
</dependency>
 
'''import''' weka.classifiers.functions.LinearRegression;
'''import''' weka.core.Instance;
'''import''' weka.core.Instances;
 
<font color="green">//Load Data set</font>
'''var''' data = new Instances(new BufferedReader(new FileReader("dataset/house.arff")));
data.setClassIndex(data.numAttributes() - 1);
<font color="green">//Build model</font>
'''var''' model = new LinearRegression();
'''try''' { model.buildClassifier(data); }
'''catch''' (Exception e) { e.printStackTrace(); }
<font color="green">//output model</font>
System.out.printf("model parameters: %s%n", model);
<font color="green">// Now Predicting the cost</font>
'''var''' myHouse = data.lastInstance();
'''var''' price = model.classifyInstance(myHouse);
System.out.printf("predicted price = %s%n", price)
==Применение==
Анонимный участник

Навигация