热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

stanford机器学习实验1

决定系统学习下机器学习了,以stanford课件为主线。notes1是关于回归的部分http:www.stanford.educlasscs229notescs229-notes1

决定系统学习下机器学习了,以stanford课件为主线。

notes1是关于回归的部分http://www.stanford.edu/class/cs229/notes/cs229-notes1.pdf 

1.线性回归

举例是对于房子价格的预测,它这个数据很遗憾网上找不到,那么就暂时用5个数据点做下实验吧。

准备house.txt,5个数据记录大小,卧室数目,价格。

area    bedrooms    price
2104    3    400
1600    3    330
2400    3    369
1416    2    232
3000    4    540

 

用R展示下数据

> house = read.table('house.txt', header=T)
> house
  area bedrooms price
1 2104        3   400
2 1600        3   330
3 2400        3   369
4 1416        2   232
5 3000        4   540
> house$area
[1] 2104 1600 2400 1416 3000
> plot(house$area, house$price)
>

 

stanford机器学习 实验1

> fit = lm(house$price~house$area)  //尝试线性回归 price = w*area + b
> abline(fit)

stanford机器学习 实验1

> summary(fit)

Call:
lm(formula = house$price ~ house$area)

Residuals:
     1      2      3      4      5
25.80  39.02 -54.08 -28.60  17.85

Coefficients:
            Estimate Std. Error t value Pr(>|t|) 
(Intercept) 26.78988   78.20681   0.343   0.7545 
house$area   0.16512    0.03588   4.602   0.0193 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 45.64 on 3 degrees of freedom
Multiple R-squared: 0.8759,     Adjusted R-squared: 0.8345
F-statistic: 21.18 on 1 and 3 DF,  p-value: 0.01929

 

因此R解出来的拟合公式是

price = 26.78988 + 0.16512 * area

 

如果我们同时考虑area, bedrooms两个因素对房价造成的影响

stanford机器学习 实验1

利用R的多元回归

> fit = lm(house$price~house$area + house$bedrooms)
> summary(fit)

Call:
lm(formula = house$price ~ house$area + house$bedrooms)

Residuals:
     1      2      3      4      5
25.80 -12.02 -24.10   5.16   5.16

Coefficients:
                Estimate Std. Error t value Pr(>|t|)
(Intercept)    -70.43460   59.50462  -1.184    0.358
house$area       0.06384    0.04458   1.432    0.288
house$bedrooms 103.43605   40.09826   2.580    0.123

Residual standard error: 26.87 on 2 degrees of freedom
Multiple R-squared: 0.9713,     Adjusted R-squared: 0.9426
F-statistic: 33.87 on 2 and 2 DF,  p-value: 0.02868

price = –70.43 + 0.06384 * area + 103.43605 * bedrooms

这个和课件上出入都很大,主要还是这边数据集合太小了,只有5个数据点。

 

C++实验

考虑到上面的回归其实本质上都是最小二乘问题。如果从线性代数角度求解最小二乘AX=b,这里用eigen做下实验,分别对应上面的1元和多元线性回归两个例子。

stanford机器学习 实验1

stanford机器学习 实验1 始终是1, stanford机器学习 实验1 对应试area, 如果是二元回归 stanford机器学习 实验1 对应 price

/** 
 *  ==============================================================================
 * 
 *          \file   stanford1.cc
 *
 *        \author   chenghuige   
 *
 *          \date   2011-02-27 15:27:07.614842
 *  
 *  \Description:  stanford 机器学习实验
 * 
area    bedrooms    price
2104    3    400
1600    3    330
2400    3    369
1416    2    232
3000    4    540

 *  ==============================================================================
 */

#define private public
#define protected public
#include 
#include <string>
#include 
#include 
#include 
#include 
#include 
#include 
#include "debug_help.h"
#include "utils/matrix_help.h"
using namespace std;
DEFINE_string(type, "simple", "");

vec linear_regression(const mat& A, const vec& b)
{ //Ax=b least squar sort or other method return x
    return A.jacobiSvd(ComputeThinU | ComputeThinV).solve(b);
}

void run()
{
    mat data(5, 4); //5data points, each with 3 attrib with a const attrib
    data <<1, 2104, 3, 400,
            1, 1600, 3, 330,
            1, 2400, 3, 369,
            1, 1416, 2, 232,
            1, 3000, 4, 540;
    cout <<"实验数据如下: \n" <"一元线性回归结果如下,对应常系数和area系数: " <//一元线性回归
    cout <<"二元线性回归结果如下,对应常系数和area系数和bedrooms系数: " <//二元线性回归
}

int main(int argc, char *argv[])
{
    FLAGS_logtostderr = true;
    google::InitGoogleLogging(argv[0]);
    google::InstallFailureSignalHandler();
    int s = google::ParseCommandLineFlags(&argc, &argv, false);
    boost::progress_timer timer;

    run();

    return 0;
}

[chg@localhost bin]$ ./stanford1
实验数据如下:
   1 2104    3  400
   1 1600    3  330
   1 2400    3  369
   1 1416    2  232
   1 3000    4  540
一元线性回归结果如下,对应常系数和area系数:
26.7899
0.165119
二元线性回归结果如下,对应常系数和area系数和bedrooms系数:
-70.4346
0.0638434
103.436
0.00 s

 

 

可以看到和R的结果是一致的。


推荐阅读
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Google最新推出的嵌入AI技术的便携式相机Clips现已上架,旨在通过人工智能技术自动捕捉用户生活中值得纪念的时刻,帮助人们减少照片数量过多的问题。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
author-avatar
测试帐号
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有