关于Logistics Regression

1. 从模型开始

Logistic Regression(常被翻译做“逻辑回归”) 一种分类模型,由于算法的简单和高效,在实际中应用非常广泛,尤其是它具有出色地将众多变量糅杂在一起并最终输出一个可以当做概率的值(大熔炉即视感),因此颇为常用。

1.1 先从S形函数开始(Sigmoid Function)

\( f(t) = \frac{e^t}{1+e^t} = \frac{1}{1+e^{-t}} \)

该函数的神奇之处在于,可以将原本线性无拘无束的t值困在[0,1]范围内,并变换出一条柔美的S型曲线(Sigmoid Curve)。

Sigmoid Curve

其实该函数还有另外一个名字——Logistic Function.

1.2 Logistic Regression Model

借助Logistic Function, 这里定义Logistic回归模型。

$$P(Y=1|X) = \frac{exp(wx+b)}{1+exp(wx+b)} $$
$$P(Y=0|X) = \frac{1}{1+exp(wx+b)}$$

其中, \( x \in R^n \)是输入, \( Y \in \) {0,1}是输出,\( w,b \)为参数(w-权值, b-偏置)

从上文的sigmoid function我们就可以观察到,Logistic回归模型可以将线性函数\( (wx+b) \)转换成概率P(Y=1|X)

阅读全文 »

[日常生活]如何有效杀灭蟑螂

在香港租的一个房子中蟑螂成灾,每到夜幕降临它们便结伴而出,而且完全没有明显怕人的迹象,这实在让我觉得很恐慌。后来在知乎上查到了有效的杀蟑螂技巧——使用拜耳制造的蟑螂药!效果奇好,一杀杀光光,真是居家必备的良心产品!在使用的过程中我总结出了一些经验和注意事项,前几日写给同事,今天干脆也就放上来了。

阅读全文 »

Python爬虫抓取新闻联播内容

近日澎湃新闻刊登了一则新闻,内容是有招商证券分析团队通过分析新闻联播的关键字判断股市涨跌,在整个5月中准确率高到爆棚,于是我就先写了一个爬虫打算有空时用到,现在先把代码送给你们吧——一个用Python Scrapy写的一个新闻联播文字版的爬虫:)

阅读全文 »

使用AdaBoost对股票的涨跌进行预测

近期股市大热,一些朋友们估计已经蠢蠢欲动想要做些什么了吧!我这里先抛砖引玉,丢出一个使用sklearn对个股次日涨跌进行预测的简单方法。

AdaBoost作为分类模型

AdaBoost是我个人很喜欢的分类器,在参数合适的情况下它的预测效果往往能带带来不错的效果。

而Adaboost的训练方法其实是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。

大致过程叙述如下:

  1. 其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。
  1. 将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

具体过程可参看维基百科此处不再类属。

阅读全文 »

Hadoop中的常用命令

总结了一些我平时常用的Hadoop命令

主参数 次参数 作用 例子
fs -get 复制文件到本地路径下 hadoop fs -get /user/hadoop/file localfile
fs -put 像目标目录推送文件 hadoop fs -put localfile /user/hadoop/hadoopfile
fs -cp 复制,参数-f,-p hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
fs -mv 移动,秒级完成 hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
fs -count 得到文件/目录等数目追加参数-q, -h有不同的意义 hadoop fs -count -q hdfs://nn1.example.com/file1
fs -du 得到指定文件的大小 hadoop fs -du /test/hadoop
fs -ls 显示文件 hadoop fs -ls /user/hadoop/file1
fs -lsr ls -R hadoop fs ls -R
fs -rm 删除文件 hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir
fs -rmr 删除文件夹(linux: rm -r) hadoop fs -rmr /usr/db/filedir/
fs -tail 输出文件的最后1千字节 hadoop fs -tail pathname
fs -test 检查文件 hadoop fs -test -e filename
fs -touchz 创建空文件 hadoop fs -touchz pathname
fs -appendToFile 将一个或者多个本地文件追加到目的文件 hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
fs -mkdir 创建目录,-p创建多层目录 hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
fs -mv 移动文件 hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
job -set-priority 设置作业优先级 hadoop job -set-priority jobid-0000-0000 VERY_HIGH
job -kill 杀掉作业 hadoop job -kill jobid-0000-0000

SVM总结

话说当年知识掌握得还比较轻飘,在某厂面试时被要求徒手推导SVM也是一种难得的体验。

转眼几年过去了,这里懒得再推SVM,就只放个综述作为备忘录。

SVM也是一种基本分类器,与之前提到的感知机(Perceptron)颇为相似,不过需要注意,感知机找到的分类超平面可以有无限多个,只要是能对训练集数据进行正确分类即可,而SVM有着更为苛刻的要求,所求的分类超平面需要离最近的样本数据点距离最大(这些离最终分类平面最近的点被称为支持向量),这就意味着最终找到的分类超平面不仅能够划分训练数据,还需面对未知的数据具有较为良好的分类能力。

阅读全文 »

Hive的trick和坑

1. Hive直接插入数据

我们知道Hive在很多时候很好用,但是有时在做一些测试的时候,需要表里有一些数据,这个时候如果再导来到去或者再写源文件生成数据却是非常的麻烦,经我反复揣摩终于发现了一种直接往Hive表中插入数据的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT INTO TABLE target_table
SELECT STACK(
2, # 插入记录的总数
'John', 80, # 记录1
'Bill', 61 # 记录2
)
FROM dual # 任意一张已经存在的表(表中的记录条数>=1即可)
LIMIT 2; # 插入记录的总数

2. join有天坑

Full outer join

Full outer join 在on中过滤分区有问题,解决方法是将分区过滤条件放到左表和右表子查询里面
比如:

# 错误写法
Select a.x,b.x from a full|left|right outer join b on (a.key=b.key and a.ds=d1 and b.ds=d1)


# 正确写法
Select t1.x ,t2.x from (select * from a where ds=d1) t1
full outer join
 (select * from  b where ds=d1) t2 on t1.key=t2.key
阅读全文 »

Transform of Hive Streaming

我这大半年来大多数时候是在用Hadoop或者Hive对数据进行处理,而在处理hive数据时,有的功能用Hive很难实现或者不能够实现,这个时候就可以引入脚本来帮忙处理,以下整理出我在工作中总结出的一些东西。

Streaming可以让我在Hive上直接运行python脚本,优点是开发快捷,缺点是效率偏低。

要使用Streaming进行开发,需要对输出进行转换——使用TRANSFORM(),将默认的输出转换成字符串,该字符串具有如下特点:

(1) 列之间的分隔符为\t;

(2) 行之间的分隔符为\n;

(3) 表中为空的数据将显示成为\N;

语法

  1. 标准MapReduce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM (
FROM src
SELECT TRANSFORM(src.c1, src.c1) USING ‘map_script’
AS cc1, cc2
CLUSTER BY cc1
) map_output
INSERT OVERWRITE TABLE pv_users_reduced
SELECT TRANSFORM(map_output.cc1, map_output.cc2)
USING ‘reduce_script’ AS c_reduced1, c_reduced2;
阅读全文 »