机器学习(下)
PCA主成分分析
目的:降维
找这个特征分布差异比较大的作为主成分
通过坐标系的变换,找到一个分布差异比较大的轴
比如100个样本,4个特征。转换为2个特征。
100 * 4的矩阵,再乘上一个4*2的矩阵,可以变成100 * 2的矩阵
目标是找到4*2的矩阵
协方差
表示两个特征之间的相关程度
两个特征之间的协方差
σ j k = 1 n − 1 ∑ i = 1 n ( x i j − x j ˉ ) ( x i k − x k ˉ ) \sigma_{jk}=\frac{1}{n-1}\sum\limits_{i=1}^n(x_{ij}-\bar{x_j})(x_{ik}-\bar{x_k}) σjk=n−11i=1∑n(xij−xjˉ)(xik−xkˉ)
协方差矩阵
∑ = 1 n − 1 ( ( X − x ˉ ) T ( X − x ˉ ) ) \sum=\frac{1}{n-1}((X-\bar x)^T(X-\bar x)) ∑=n−11((X−xˉ)T(X−xˉ))
x ˉ = 1 n ∑ k = 1 n x i \bar x=\frac{1}{n}\sum\limits_{k=1}^nx_i xˉ=n1k=1∑nxi
协方差矩阵计算特征值
取比较大的特征值,将其特征向量构造成矩阵即可
SVD奇异值分解
用于推荐系统,图像压缩
A m × n = u m × m × ∑ m × n × V n × n T A_{m\times n}=u_{m\times m} \times \sum_{m\times n} \times V^T_{n \times n} Am×n=um×m×∑m×n×Vn×nT
描述一个变换的时候,我们只需要描述这个变换主要的变化方向就好了
分解得到的 ∑ \sum ∑矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)
a m × n = u m × r × ∑ r × r V r × n T a_{m \times n}=u_{m \times r} \times \sum_{r \times r} V ^ T_{r \times n} am×n=um×r×∑r×rVr×nT
缺点:不知道每一维具体的含义
个性化推荐:
如果 B o b 2 D = B o b T × U × ∑ − 1 Bob_{2D}=Bob^T\times U \times \sum^{-1} Bob2D=BobT×U×∑−1
K-means聚类算法
- 创建k个点作为起始质心(经常是随机选择)
- 当任意一个点的簇分配结果发生改变时,对数据集中的每个数据点,对每个质心与数据点之间的距离,将数据点分配到距离其最近的簇
- 对每一个簇,计算簇中所有点的均值并将均值作为质心
DBSCAN
找异常点/离群点
大圆:核心对象,周围半径内有多于 m i n _ s a m p l e min\_sample min_sample个点
小圆:非核心对象,周围半径内少于 m i n _ s a m p l e min\_sample min_sample个点
黑色点:离群点和任何核心对象之间的距离大于阈值
MeanShift
在d维空间中,任选一个点,以该点为圆心,落在这个球内所有点和圆心都产生一个向量,将这些向量相加,结果就是Mean shift向量
再以meanshift的重点做为圆心,再次得到一个meanshift向量,因此逐渐收敛到概率密度最大的地方
推荐系统
协同过滤
- 收集用户偏好
- 找到相似的用户或物品
- 计算推荐
相似度计算
欧氏距离: d ( x , y ) = ∑ ( x i − y i ) 2 d(x,y)=\sqrt{\sum(x_i-y_i)^2} d(x,y)=∑(xi−yi)2 s i m ( x , y ) = 1 1 + d ( x , y ) sim(x,y)=\frac{1}{1+d(x,y)} sim(x,y)=1+d(x,y)1
皮尔逊相关系数
c o v ( X , Y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 cov(X,Y)=\frac{\sum_{i=1}^n(X_i-\bar X)(Y_i-\bar Y)}{n-1} cov(X,Y)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)
皮尔逊相关系数: ρ X , Y = c o r r ( X , Y ) = c o v ( X , Y ) σ X σ Y \rho_{X,Y}=corr(X,Y)=\frac{cov(X,Y)}{\sigma_X \sigma_Y} ρX,Y=corr(X,Y)=σXσYcov(X,Y)
Pearson相关系数是用协方差除以两个变量的标准差得到的
余弦相似度: ∑ x i y i ∑ x i 2 ∑ y i 2 \frac{\sum x_iy_i}{\sqrt{\sum x_i^2} \sqrt{\sum y_i^2}} ∑xi2∑yi2∑xiyi
邻居的选择
A.固定数量的邻居
B.基于相似度门槛的邻居
- 基于用户的协同过滤
- 基于物品的协同过滤
基于用户的协同过滤
在用户中找相似度
看相似用户选了何种
问题:
用户评分矩阵太稀疏
需要推断矩阵空格中的值
对于一个新用户,很难找到邻居用户
新物品,缺少评分
相似度用皮尔逊相似度
考虑共同打分物品的数目
对打分进行归一化处理
设置一个相似度阈值
不流行:
- 稀疏问题
- 数百万用户量太大
- 人是善变的
基于物品的协同过滤
- 计算性能高,通常用户数量远大于物品数量
- 可预先计算保留,物品并不善变
隐语义模型
- 从数据出发,进行个性化推荐
- 用户和物品之间有着隐含的联系
- 隐含因子让计算机能理解就好
- 将用户和物品通过中介隐含因子联系起来
R U I = P U Q I = ∑ k = 1 K P U , k Q k , I R_{UI}=P_UQ_I=\sum\limits_{k=1}^KP_{U,k}Q_{k,I} RUI=PUQI=k=1∑KPU,kQk,I
c = ∑ U , I ∈ K ( R U I − R U I ^ ) 2 = ∑ U , I ∈ K ( R U I − ∑ k = 1 K P U , k Q k , I ) 2 + λ ∣ ∣ P U ∣ ∣ 2 + λ ∣ ∣ Q t ∣ ∣ 2 c=\sum\limits_{U,I \in K}(R_{UI}-\hat{R_{UI}})^2=\sum\limits_{U,I \in K}(R_{UI}-\sum\limits_{k=1}^KP_{U,k}Q_{k,I})^2+\lambda ||P_U||^2+\lambda||Q_t||^2 c=U,I∈K∑(RUI−RUI^)2=U,I∈K∑(RUI−k=1∑KPU,kQk,I)2+λ∣∣PU∣∣2+λ∣∣Qt∣∣2
利用梯度下降与迭代求解
自然语言处理
- 拼写检查、关键词检索
- 文本挖掘(产品价格、日期、时间、地点、人名、公司名)
- 文本分类
- 机器翻译
- 客服系统
- 复杂对话系统
深度学习
- 手工特征耗时耗力,不宜拓展
- 自动特征学习快,方便拓展
- 深度学习提供通用的学习框架
- 既可以监督学习,也可以无监督学习
语言模型
P ( S ) = p ( w 1 , … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w 1 , w 2 , … , w n − 1 ) P(S)=p(w_1,\dots,w_n)=p(w_1)p(w_2|w_1)\dots p(w_n|w_1,w_2,\dots,w_{n-1}) P(S)=p(w1,…,wn)=p(w1)p(w2∣w1)…p(wn∣w1,w2,…,wn−1)
P ( S ) P(S) P(S)被称为语言模型,用来计算一个句子概率的模型
- 数据过于稀疏
- 参数空间太大
N-gram模型
每一个词的出现只与前面 n n n个词有关系
一般n=2,3
假设 n = 2 n=2 n=2, P ( S ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 2 , w 1 ) … p ( w n ∣ w n − 1 , w n − 2 ) P(S)=p(w_1)p(w_2|w_1)p(w3|w_2,w_1)\dots p(w_n|w_{n-1},w_{n-2}) P(S)=p(w1)p(w2∣w1)p(w3∣w2,w1)…p(wn∣wn−1,wn−2)
词向量
讲词转化为一个向量,并且具有一定的含义
word2vec
相同词根,词义相近的词距离下
关注的是上下文的逻辑,而不是这个词是什么
神经网络模型
得知前 n − 1 n-1 n−1个词具体是什么,然后预测第 n n n个词是什么
第一层:输入层,word2vec
第二层:投影层,向量拼接,首尾拼接
第三层:Hidden Layer
第四层:输出层
训练样本: ( C o n t e x t ( w ) , w ) (Context(w),w) (Context(w),w)包括前 n − 1 n-1 n−1个词分别的向量,假定每个词向量大小为 m m m
投影层: ( n − 1 ) ∗ m (n-1)*m (n−1)∗m首尾拼接起来的大向量
输出: y w = ( w w , 1 , … , y w , N ) T y_w=(w_{w,1},\dots,y_{w,N})^T yw=(ww,1,…,yw,N)T
表示上下文为 c o n t e x t ( w ) context(w) context(w)时,下一个词恰好为词典中第 i i i个词的概率
归一化: p ( w ∣ C o n t e x t ( w ) ) = e y w , i w ∑ i = 1 N e y w , i p(w|Context(w))=\frac{e^{y_w,i_w}}{\sum_{i=1}^N e^{y_{w,i}}} p(w∣Context(w))=∑i=1Neyw,ieyw,iw
Hierarchical Softmax
CBOW
通过上下文预测当前词语的出现概率的模型
Continuous Bag-of-Words Model
似然函数: α = ∑ w ∈ C l o g p ( w ∣ C o n t e x t ( w ) ) \alpha=\sum\limits_{w\in C}logp(w|Context(w)) α=w∈C∑logp(w∣Context(w))
softmax分层思想
越重要的词离根节点越近
在每一步需要走左子树还是右子树,利用逻辑回归 L o g i s t i c Logistic Logisticsigmoid函数
输入层:上下文的词语的词向量。词向量是个随机值,随着训练的进行不断被更新
投影层:求和(简单的向量加法)
输出层:输出最可能的 w w w,语料库中词汇量是固定的 ∣ C ∣ |C| ∣C∣个,所以上述过程其实也是一个多分类问题,给定特征,从 ∣ C ∣ |C| ∣C∣个分类中挑一个
p w p^w pw:从根节点出发到达 w w w对应叶子节点的路径
l w l^w lw:路径中包含结点的个数
p 1 w , p 2 w … , p l w w p_1^w,p_2^w\dots,p^w_{l^w} p1w,p2w…,plww:路径 p w p^w pw中的各个节点
d 2 w , … d l w w ∈ { 0 , 1 } d^w_2,\dots d^w_{l^w} \in \{0,1\} d2w,…dlww∈{0,1}词w的编码, d j w d^w_j djw表示路径 p w p^w pw第j个节点对应的编码(根节点无编码)
θ 1 w … θ l w − 1 w ∈ R m \theta_1^w \dots \theta^w_{l^w-1}\in R^m θ1w…θlw−1w∈Rm路径 p w p^w pw中非叶节点对应的参数向量
正例概率: σ ( x w T θ ) = 1 1 + e − x w T θ \sigma(x_w^T\theta)=\frac{1}{1+e^{-x_w^T\theta}} σ(xwTθ)=1+e−xwTθ1
负例概率: 1 − σ ( x w T θ ) 1-\sigma(x_w^T \theta) 1−σ(xwTθ)
p ( d j w ∣ X w , θ j − 1 w ) = [ σ ( X w T θ j − 1 w ) ] 1 − d j w . [ 1 − σ ( x w T θ j − 1 w ) ] d j w p(d_j^w|X_w,\theta_{j-1}^w)=[\sigma(X_w^T\theta_{j-1}^w)]^{1-d_j^w}.[1-\sigma(x_w^T\theta_{j-1}^w)]^{d_j^w} p(djw∣Xw,θj−1w)=[σ(XwTθj−1w)]1−djw.[1−σ(xwTθj−1w)]djw
利用梯度上升进行词向量的求解
word2vec采用将和向量的更新量整个应用到每个单词的词向量上去
负采样(Negative Sampling)
如何选取负样本
高频率的词更容易被采样出来
根据词频将其公平的分配给每个词语
构建一个0~1的随机数,看随机数落在的区间是哪个词
Skip-gram
通过一个词预测它的上下文