Y nos gustaria usar esa data para ayudarnos a elegir la siguiente ciudad para expandirse.
Plotting the Data
El archivo ex1data1.txt contiene el conjunto de datos para nuestro problema de regresión lineal. La primera columna es la población de una ciudad y la segunda columna es el beneficio de un carro sanguchero en esa ciudad. Un valor negativo para el beneficio indica un pérdida.
El script ex1.m ya ha sido configurado para cargar estos datos para usted.
Antes de comenzar cualquier tarea, a menudo es útil comprender los datos visualizándolos. Para este conjunto de datos, puede utilizar un diagrama de dispersión para visualizar los datos, ya que sólo tiene dos propiedades para trazar (beneficio y población). (Muchos otros problemas que se encontrarán en la vida real son multidimensionales y no se pueden graficar en una grafica de 2d).
En ex1.m, el conjunto de datos se carga desde el archivo de datos en las variables X y y:
data = load('ex1data1.txt'); X = data(:, 1); y = data(:, 2); m = length(y); % number of training examples
plot(x, y, 'rx', 'MarkerSize', 10); ylabel('Profit in $10,000s'); xlabel('Population of City in 10,000s');
Ahora, cuando continúes ejecutando ex1.m, nuestro resultado final debería ser similar al de la Figura 1, con los mismos marcadores rojos "x" y etiquetas de eje.
![]() |
| Figura 1 |
En esta parte, se ajustará los parámetros de regresión lineal θ a nuestro conjunto de datos usando el gradient descent.
El objetivo ahora es ajustar los parametros θj de nuestro modelo. Estos son los valores que ajustaremos para minimizar el cost function. Una forma de realizar esto es usar el algoritmo batch gradient descent. En batch gradient descent cada iteracion realiza la actualización.
Con cada paso de gradient descent, sus parámetros θj se aproximan a los valores óptimos que alcanzarán el menor cost function J(θ).
En las líneas de codigo siguientes, agregamos otra dimensión a nuestros datos para acomodar el término de intersección θ0. También inicializamos los parámetros iniciales a 0 y la tasa de aprendizaje alpha a 0,01.
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;
A medida que se realiza el gradient descent para aprender a minimizar la función de coste J (θ), es útil monitorear la convergencia calculando el costo. Por eso implementaremos una función para calcular J(θ) para que pueda comprobar la convergencia de la implementación del gradient descent.
El script computeCost.m es la función que calculara J(θ) con las siguientes lineas de codigo.
J = 0; J = 1/(2*m)*((X*theta)-y)'*((X*theta)-y);
fprintf('\nTesting the cost function ...\n') % compute and display initial cost J = computeCost(X, y, theta); fprintf('With theta = [0 ; 0]\nCost computed = %f\n', J); fprintf('Expected cost value (approx) 32.07\n');
Ahora implementamos el gradient descent en el archivo gradientDescent.m teniendo en cuenta que el objetivo es minimizar J(θ) al cambiar los valores del vector θ en cada paso. Una buena manera de verificar que el gradient descent esta funcionando correctamente es mirar el valor de J(θ) y comprobar que está disminuyendo con cada paso. Y debería converger a un valor constante al final del algoritmo.
for iter = 1:num_iters temptheta1=theta(1,1) - alpha*(1/m)*sum((X*theta-y).*X(:,1)); temptheta2=theta(2,1) - alpha*(1/m)*sum((X*theta-y).*X(:,2)); theta(1,1)=temptheta1; theta(2,1)=temptheta2; J_history(iter) = computeCost(X, y, theta); end
Luego usaremos los parametros finales para trazar el ajuste lineal.
El resultado debe ser algo similar a la figura siguiente.
Y ahora haremos un par de predicciones en los beneficios de areas con 35,000 y 70,000 personas:
% Predict values for population sizes of 35,000 and 70,000 predict1 = [1, 3.5] *theta; fprintf('For population = 35,000, we predict a profit of %f\n',... predict1*10000); predict2 = [1, 7] * theta; fprintf('For population = 70,000, we predict a profit of %f\n',... predict2*10000);






Comentarios
Publicar un comentario