- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
data = load('ex1data1.txt');
X = data(:, 1); y = data(:, 2);
m = length(y); % number of training examples
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1); % initialize fitting parameters
% Some gradient descent settings
iterations = 1500;
alpha = 0.01;
function J = computeCost(X, y, theta)
m = length(y); % number of training examples
hypothesis = theta' * X';
J = 1 / (2 * m) * sum((hypothesis' - y) .^ 2);
endfunction
% compute and display initial cost
computeCost(X, y, theta)
Язык: Матлаб / Октава.
Что происходит: из массива создается матрица путем добавления еще одного такого же массива полностью заполненного единицами, а потом эта матрица умножается на вектор из двух элементов (первая колонка, соответственно, умножается на первый элемент вектора, вторая - на второй). Т.е. это равносильно вызову функции вида y(x) = Kx + b для всех членов исходного массива X. По сути происходит следующее: y(x_0, x_1) = K * x_1 + b * x_0, где x_0 всегда равен единице.
Источник разглашать не буду.
LispGovno 11.09.2012 15:42 # +1
Лаба.
wvxvw 11.09.2012 15:48 # +1
guest 11.09.2012 16:49 # +2
wvxvw 11.09.2012 16:56 # +2
guest 11.09.2012 17:42 # 0
wvxvw 11.09.2012 17:46 # +1
guest 11.09.2012 17:58 # +1
wvxvw 11.09.2012 18:02 # 0
vistefan 11.09.2012 22:15 # +5
guest 11.09.2012 18:16 # 0
wvxvw 11.09.2012 18:28 # −1
bormand 11.09.2012 18:45 # +2
А распараллелить обычный цикл - задача совсем не тривиальная.
guest 11.09.2012 18:58 # 0
wvxvw 11.09.2012 19:23 # 0
С другой стороны - такой выигрыш станет неактуальным, когда количество колонок будет выше чем количество ячеек куда можно одновременно поместить информацию (хз сколько их может быть, но наверняка это двузначные цифры).
bormand 11.09.2012 20:17 # +2
guest 11.09.2012 21:42 # 0
, но вроде ж нет.
Или, хз, меня просто сам язык выводит из себя таким подходом. Напоминает школь\
ный Фортран, где было 100500 разных встроенных функций для вывода на матричные\
принтеры с разным размером матрицы, а строки склеивались через задний проход.\
Так и тут, универсальное, при чем хорошее решение работает хуже чем какая-то \
встроенная функция, которую нужно заучивать...
wvxvw 11.09.2012 21:51 # 0
guest 11.09.2012 19:19 # 0
defecate-plusplus 11.09.2012 20:40 # 0
kipar 12.09.2012 10:55 # 0
roman-kashitsyn 12.09.2012 19:06 # +2
bormand 12.09.2012 19:07 # +4
wvxvw 12.09.2012 19:26 # +1
LispGovno 12.09.2012 23:49 # +2
guest 11.09.2012 19:17 # 0
wvxvw 11.09.2012 21:49 # 0
Типичный пример уродского кода написанного сотрудником кафедры информатики/чего-то там. Боже упаси от такого в обычной жизни: я бы только за названия переменных пальцы в двери.
kipar 12.09.2012 11:00 # 0
wvxvw 12.09.2012 11:21 # −2
kipar 12.09.2012 16:44 # 0
Да и вообще - если это функция регрессии, то зачем в ней упоминать какие-то prices и features?
wvxvw 12.09.2012 17:26 # 0
И, да, такие вещи тяжело понять без сравнения. В лучших практиках любого популярного языка всегда вам скажут, что называть переменные одной буквой - плохо, и нужно давать осмысленные имена.
Чтобы вы не сомневались:
это осмысленное название, соответствующее значению, понятное любому человеку, который будет этот код читать. А то, что вам кажется понятным, на самом деле никому не понятно, более того, на заучивание этой бессистемной херни уходит драгоценное время и человеческая память.
features - не какие-то, так именно принято называть данные по которым расчитывается значение. Это вполне себе распространенное в этой области понятие которое однозначно описывает именно то, что передается в переменной Х. Но, в отличие от "Х", для англоязычного читателя, это еще и объясняет то, что стоит за этой переменной.
guest 14.09.2012 12:05 # 0