热门标签 | 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的结果是一致的。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
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社区 版权所有