Это 16-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
см. учебникКраткое руководство по октаве
Теперь давайте посмотрим, как использовать октаву для расчета функции стоимости J(θ) на практике. Данные большие, и они воздействуют на чувства, помещая их впереди, и вы можете увидеть их в конце статьи.
Готов к работе
Сначала сохраните файл локально. Обратите внимание, что сегодня это вычисляет только функцию стоимости для одномерной линейной регрессии. Первая группа приведенных тестовых данных также имеет характеристику количества комнат, которую можно удалить позже.
Вспомните функцию стоимости для одномерной линейной регрессии:
Начало
-
сначала прочитать данные
-
因为要做单变量线性回归,但是现在feature矩阵是不符合要求的,我们只需要保留其第一列数据,现在对其进行修改。 воплощать в жизнь
feature = feature(:,1:1)
После этого остается только один столбец данных. -
функция записи
- Сначала проанализируем формулу
- Рассчитайте по этой формуле
- m означает, что групп данных меньше, поэтому вы можете использовать
m = length(feature)
илиm = lenth(price)
- y - вектор цен
- x - вектор признаков
- иметь дело с
-
узнай первым, что можно рассматривать как умножение матриц и векторов:
На этом шаге мы можем узнать, что наш вектор-столбец X. Теперь нам нужно преобразовать его в матрицу 47 × 2, а первый столбец равен 1. Используйте следующий код для преобразования:
o = ones(47,1); feature = [o,feature];
-
Результатом предыдущего шага должен быть вектор-столбец 47x1, вычтите из результата вектор y.
-
Наконец, возведите в квадрат и просуммируйте вектор y.
-
- Окончательная функция выглядит так:
function J = cost_function(X,y,theta) m = length(y); % 获得m predict = X*theta; % 计算X*theta result = (predict - y) .^ 2; % 减法之后平方 J = 1/(2*m) * sum(result); % 对结果求和并÷2m endfunction
- Сначала проанализируем формулу
-
Я помещаю данные и функции в текущий каталог.
Теперь полный шаг состоит в том, чтобы сначала преобразовать данные в два файла feature.txt и price.txt, создать функцию cost_function.m и поместить ее в текущий каталог. А полный код октавы выглядит следующим образом:
load feature.txt load price.txt feature = feature(:,1:1); o = ones(47,1); feature = [o,feature]; theta = [0;1]; % 因为两个θ是列向量,中间记得用分号隔开 cost_function(feature,price,theta) %输入完这一句就可以愉快的看到结果了~
Уведомление: моя проверенная тета, вы изменяете θ по мере необходимости.
Тестовые данные
Размер дома и количество комнат
2104 3
1600 3
2400 3
1416 2
3000 4
1985 4
1534 3
1427 3
1380 3
1494 3
1940 4
2000 3
1890 3
4478 5
1268 3
2300 4
1320 2
1236 3
2609 4
3031 4
1767 3
1888 2
1604 3
1962 4
3890 3
1100 3
1458 3
2526 3
2200 3
2637 3
1839 2
1000 1
2040 4
3137 3
1811 4
1437 3
1239 3
2132 4
4215 4
2162 4
1664 2
2238 3
2567 4
1200 3
852 2
1852 4
1203 3
цена дома
399900
329900
369000
232000
539900
299900
314900
198999
212000
242500
239999
347000
329999
699900
259900
449900
299900
199900
499998
599000
252900
255000
242900
259900
573900
249900
464500
469000
475000
299900
349900
169900
314900
579900
285900
249900
229900
345000
549000
287000
368500
329900
314000
299000
179900
299900
239500