开篇:首先这本书的名字很霸气,全书内容讲的是R语言在机器学习上面的应用,一些基本的分类算法(tree,SVM,NB),回归算法,智能优化算法,维度约减等,机器学习领域已经有很多成熟的R工具箱,毕竟这个领域被统计学称霸了十多年,常用R工具箱都可以在这里面找到http://www.rdatamining.com/docshttp://www.mloss.org/software/

本书第一张介绍了R以及相应包的安装,同时拿了UFO数据集进行练手,数据集以及源码网上都有的

首先加载数据集(博客园的插入代码不支持R语言!!!!)

 ufo <- read.delim(file.path("data", "ufo", "ufo_awesome.tsv"),
sep = "\t",
stringsAsFactors = FALSE,
header = FALSE,
na.strings = "")

read.* 有好多函数csv,csv2,table,delim等,具体的操作可以查看帮助文档?read.delim,这里面第一个参数路径,sep文本的分隔符,stringsAsFactors 是否转化为因子变量,header 是否有文件头 ,na.strings缺失值的处理;

加载数据集后 看看文件的头六个样本或最后六个样本(head(ufo)/tail(ufo))

数据集中包含61869个instance,5个feature,v1,v2是第一次看到ufo的时间,向当局报道看见ufo的时间,v3是目击者所在的城市,所在的州,v4对ufo的短描述,v5看见ufo持续的时间,v6长描述

可以把v1~v6换成我们自己定义的名词

 names(ufo) <- c("DateOccurred" , "DateReported" , "Location", "ShortDescription", "Duration", "LongDescription")

看到第1,2个feature 时间是字符串型的,这里可以转化为R的时间格式

 ufo$DateOccurred<-as.Date(ufo$DateOccurred,format="%Y%m%d");

结果出错了,执行下面语句发现 某些样本的日期有问题

 head(ufo[which(nchar(ufo$DateOccurred)!=8 | nchar(ufo$DateReported)!=8),1])
[1] "0000"
[2] "Callers report sighting a number of soft white balls of lights headingin an easterly directing then changing direction to the west beforespeeding off to the north west."
[3] "0000"
[4] "0000"
[5] "0000"
[6] "0000"

这条语句的意思就是 把数据集中第一列跟第二列的字符长度不为8的 样本找出来并取前六个看看,可以看出有些样本的日期字符串是异常的,接下来看看到底有多少个这样的样本。

 > good.rows <- ifelse(nchar(ufo$DateOccurred) != 8 | nchar(ufo$DateReported) != 8,FALSE,TRUE)
> length(which(!good.rows))
[1] 730

有730个这样的样本
这里good.rows 得到了 日期完整的样本index

更新ufo,并转化日期字符串为R内置的日期格式

 ufo <- ufo[good.rows, ]
ufo$DateOccurred <- as.Date(ufo$DateOccurred, format = "%Y%m%d")
ufo$DateReported <- as.Date(ufo$DateReported, format = "%Y%m%d")

可以看到Location 特征是一个字符串,包含城市跟州的信息,现在想把城市跟州拆分作为两列加入到ufo数据集中。

首先定义一个函数

 get.location <- function(l)
{
split.location <- tryCatch(strsplit(l, ",")[[1]],error = function(e) return(c(NA, NA)))
clean.location <- gsub("^ ","",split.location)
if (length(clean.location) > 2)
{
return(c(NA,NA))
}
else
{
return(clean.location)
}
}

trycatch是异常函数,gsub是正则函数,把字符串首字符为空格的去掉,最后判断得到的clean.location的list是否长度为2,就是一个为城市一个为州,如果比如Location里面城市跟州之间有好多个逗号,那么也会被返回NA的。
把这个函数应用到数据集上

 > city.state <- lapply(ufo$Location, get.location)
> head(city.state)
[[1]]
[1] "Iowa City" "IA" [[2]]
[1] "Milwaukee" "WI" [[3]]
[1] "Shelton" "WA" [[4]]
[1] "Columbia" "MO" [[5]]
[1] "Seattle" "WA" [[6]]
[1] "Brunswick County" "ND"

用到了lapply(list-apply)函数,形式apply(vector,function),然后返回特定结果
这里返回了list链表

 > location.matrix <- do.call(rbind, city.state)
> ufo <- transform(ufo,
+ USCity = location.matrix[, 1],
+ USState = tolower(location.matrix[, 2]),
+ stringsAsFactors = FALSE)

在ufo后面添加2列特征,其中USState把字母转化成了小写;
下面接着把数据集中不在美国的的样本 城市跟州都定为NA,接着抽取发生在美国的UFO样本

 us.states<-c('ak','al','ar','az','ca','co','ct','de','fl','ga'
,'hi','ia','id','il','in','ks','ky','la','ma','md'
,'me','mi','mn','mo','ms','mt','nc','nd','ne','nh'
,'nj','nm','nv','ny','oh','ok','or','pa','ri','sc'
,'sd','tn','tx','ut','va','vt','wa','wi','wv','wy')
ufo$USState <- us.states[match(ufo$USState, us.states)]
ufo$USCity[is.na(ufo$USState)] <- NA
8 ufo.us <- subset(ufo, !is.na(ufo$USState))

ufo.us就是发生在美国目击ufo的样本,ufo.us类似跟ufo一样是个数据框,是ufo的subset
现在通过summary函数观察一下各个特征的5个统计数

> summary(ufo.us$DateOccurred)
Min. 1st Qu. Median Mean 3rd Qu. Max.
"1400-06-30" "1999-09-06" "2004-01-10" "2001-02-13" "2007-07-26" "2010-08-30"

可以看到最早的在1400年 就看到了。。最早至第一个四分位的时间跨度有点大,可以看看整个数据集样本的时间分布直方图看一看

 quick.hist <- ggplot(ufo.us, aes(x = DateOccurred)) +
geom_histogram() +
scale_x_date(breaks = "80 years") ggsave(plot = quick.hist,
filename = file.path("images", "quick_hist.pdf"),
height = 6,
width = 8)

ggsave是保存图片,也可以通过print(quick.hist)来打印至屏幕

          
可以看出大部分时间在1960之后,继续精简数据集

 ufo.us <- subset(ufo.us, DateOccurred >= as.Date("1990-01-01"))
nrow(ufo.us)

对新数据集画直方图

          

machine learning for hacker记录(1) R与机器学习的更多相关文章

  1. machine learning for hacker记录(3) 贝叶斯分类器

    本章主要介绍了分类算法里面的一种最基本的分类器:朴素贝叶斯算法(NB),算法性能正如英文缩写的一样,很NB,尤其在垃圾邮件检测领域,关于贝叶斯的网上资料也很多,这里推荐那篇刘未鹏写的http://mi ...

  2. machine learning for hacker记录(2) 数据分析

    本章主要讲了对数据的一些基本探索,常见的six numbers,方差,均值等 > data.file <- file.path('data', '01_heights_weights_ge ...

  3. machine learning for hacker记录(4) 智能邮箱(排序学习&推荐系统)

    本章是上一章邮件过滤技术的延伸,上一章的内容主要是过滤掉垃圾邮件,而这里要讲的是对那些正常的邮件是否可以加入个性化元素,由于每个用户关心的主题并非一样(有人喜欢技术类型的邮件或者购物促销方便的内容邮件 ...

  4. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记

    Week1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  5. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记(完结)

    Week 1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  6. Machine Learning第十周笔记:大规模机器学习

    博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...

  7. Hands on Machine Learning with Sklearn and TensorFlow学习笔记——机器学习概览

    一.什么是机器学习? 计算机程序利用经验E(训练数据)学习任务T(要做什么,即目标),性能是P(性能指标),如果针对任务T的性能P随着经验E不断增长,成为机器学习.[这是汤姆米切尔在1997年定义] ...

  8. [Machine Learning] 国外程序员整理的机器学习资源大全

    本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...

  9. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

随机推荐

  1. (39)C#Ping类

    一.Ping类 引用命名空间 using System.Net.NetworkInformation 控制台版 using System; using System.Collections.Gener ...

  2. 洛谷——P1331 海战

    P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...

  3. Java获取指定时间(转)

    说明:从LocalDate的API上看,主要用于快速获取当前年月日,而DateFormatter也基本上伴随着使用.如果是操作Date对象的,主要是用于时间戳等,伴随着使用的是SimpleDateFo ...

  4. Eclipse工程中Java Build Path中的JDK版本和Java Compiler Compiler compliance level的区别(转)

    在这里记录一下在eclipse中比较容易搞混淆和设置错误的地方.如下图所示的功能: 最精准的解释如下: Build Path是运行时环境  Compiler是编译时环境  假设,你的代码用到泛型,Bu ...

  5. PHP平均整数红包算法

    <?php function RandomMoney( $money,$num ){ $arr = array(); $total_money = 0; $this_money = $money ...

  6. Spring IOC知识java反射

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

  7. 邁向IT專家成功之路的三十則鐵律 鐵律十五:IT人生活之道-赤子之心

    人的年齡與身體可以因歲月的無情不斷老化,但我們的這一顆心可千萬不要跟著老化.身為IT工作者的我們,每天除了要面對那死板僵硬的電腦挑戰之外,可能還要面臨許多人事方面的紛擾.這時候如果在平日的生活之中,仍 ...

  8. DVBS/S2在数字电视系统中的应用 三 (LNB介绍)

    DVBS/S2在数字电视系统中的应用 三 (LNB介绍) 老谢在前面两篇文章中(例如以下).都有提到LNB这一概念. DVBS/S2在数字电视系统中的应用 一 (DVBS/S2接收系统Block Di ...

  9. HDU 1253:胜利大逃亡(简单三维BFS)

    pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  10. Oracle数据库有用函数

    有用函数 DECODE 语法例如以下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的不论什么类型的 ...