[笔记]机器学习--01线性回归

数据库:Iris 数据集;

属性:

  • 1. 花萼长度(Sepal Length)
  • 2. 花萼宽度(Sepal Width)
  • 3. 花瓣长度(Petal Length)
  • 4. 花瓣宽度(Petal Width)
  • 5. 种类:山鸢尾(Setosa),杂色鸢尾(Versicolour),维吉尼亚鸢尾(Virginica)

线性回归的目标是最小化成本函数:


  1. %% Initallization  
  2. clear all;  
  3. close all;  
  4. clc;  
  5.   
  6. %% ======================== Part 1: Plotting ===========================  
  7. fprintf('Plotting Data ...\n');  
  8. data = csvread('Iris.txt');  % 导入Iris 数据  
  9. x = data(:,1); y = data(:,3);  % 花萼长度&花瓣长度  
  10. m = length(y);  
  11.   
  12. % Plot Data  
  13. plotData(x,y);  
  14.   
  15. fprintf('Program paused. Press enter to continue. \n');  
  16. pause;  
  17.   
  18. %% ======================== Part 2: Gradient descent ===========================  
  19. fprintf('Running Gradient Descent ...\n');  
  20.   
  21. X = [ones(m, 1), data(:, 1)];  
  22. theta = zeros(21);  
  23.   
  24. % 参数设置  
  25. iterations = 1500;  
  26. alpha = 0.01;  
  27.   
  28. % 计算损失函数  
  29. %computeCost(X, y, theta);  
  30.   
  31. % 运行梯度下降  
  32. theta = gradientDescent(X, y, theta, alpha, iterations);  
  33.   
  34. fprintf('Theta found by gradient descent: ');  
  35. fprintf('%f %f \n', theta(1), theta(2));  
  36.   
  37. hold on;  
  38. plot(X(:,2), X*theta, 'r-');  
  39. legend('Training data''Linear regression')  
  40. hold off;  
  41.   
  42. predict1 = [18] * theta;  
  43. fprintf('对于花萼长度为8厘米, 花瓣长度预测为 %f cm\n', ...  
  44.     predict1);  
  45. predict2 = [15.5] * theta;  
  46. fprintf('对于花萼长度为5.5厘米, 花瓣长度预测为 %f cm\n', ...  
  47.     predict2);   
  48. fprintf('Program paused. Press enter to continue.\n');  
  49. pause;  
  50.   
  51. %% ======================== Part 3: Visualizing J (theta_0, theta_1, ) ===========================  
  52. fprintf('Visualizing J(theta_0, theta_1) ...\n')  
  53. % 数据可视化  
  54. theta0_vals = linspace(-1010100);  
  55. theta1_vals = linspace(-14100);  
  56.   
  57. J_vals = zeros(length(theta0_vals), length(theta1_vals));  
  58.   
  59. for i = 1:length(theta0_vals)  
  60.     for j = 1:length(theta1_vals)  
  61.         t = [theta0_vals(i); theta1_vals(j)];  
  62.         J_vals(i, j) = computeCost(X, y, t);  
  63.     end  
  64. end  
  65.   
  66. J_vals = J_vals';  
  67.   
  68. figure;  
  69. surf(theta0_vals, theta1_vals, J_vals)  
  70. xlabel('\theta_0'); ylabel('\theta_1');  
  71.   
  72. figure;  
  73.   
  74. contour(theta0_vals, theta1_vals, J_vals, logspace(-2320))  
  75. xlabel('\theta_0'); ylabel('\theta_1');  
  76. hold on;  
  77. plot(theta(1), theta(2), 'rx''MarkerSize'10'LineWidth'2); 

计算梯度下降:

  1. function [theta , J_history] = gradientDescent(X, y, theta, alpha, num_iters)  
  2.   
  3.     m = length(y);  
  4.     J_history = zeros(num_iters, 1);  
  5.   
  6.     for iter = 1:num_iters  
  7.         H = X * theta;  
  8.         T = [0 ; 0];  
  9.         for i = 1 : m  
  10.             T = T + (H(i) - y(i)) * X(i, :)';  
  11.         end  
  12.           
  13.         theta = theta - (alpha * T) / m;  
  14.           
  15.         J_history(iter) = computeCost(X, y, theta);  
  16.           
  17.     end  
  18.   
  19. end 

  1. function J = computeCost(X, y, theta)  
  2.   
  3.     m = length(y);  
  4.     J = 0;  
  5.   
  6.     J = sum((X*theta - y).^2) / (2.* m);  
  7.   
  8. end 

结果展示:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习线性回归是一种常见的机器学习算法,用于预测数值型变量的值。下面是一个简单的回归例子,以展示如何使用这个算法。 首先,我们需要准备数据集。假设我们有一个房屋价格的数据集,其中包含了房屋的大小和房价。我们可以使用这个数据集来训练一个线性回归模型,以便预测房价。 在介绍算法之前,我们需要导入必要的库,如numpy和pandas。这些库将帮助我们处理和分析数据。 接下来,我们加载数据集并进行必要的数据清洗。这可能包括去除缺失值、处理异常值等。 然后,我们将数据集分为训练集和测试集。训练集将用于训练模型,而测试集将用于评估模型的性能。 在进行机器学习之前,我们需要对数据进行特征缩放。这可以确保所有特征都具有相同的重要性。 接下来,我们将使用线性回归算法来拟合我们的训练数据。这将生成一个线性模型,该模型可以用于预测房价。 我们可以使用模型的系数和截距来了解每个特征对预测的影响。系数的正负表示了特征影响的方向,而系数的绝对值表示了特征的重要性。 最后,我们可以使用测试集来评估模型的性能。我们可以使用一些常见的性能指标,如均方误差和决定系数来评估我们的模型。 总结一下,这个机器学习线性回归的例子笔记本演示了如何使用线性回归算法来预测房价。它涵盖了数据准备、模型训练、模型评估等步骤,以及一些常用的数据处理和模型评估技术。通过这个例子,我们可以更好地理解和应用机器学习线性回归算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值