李宏毅机器学习课程5~~~分类:逻辑回归


Function Set


这里写图片描述

不同的w,b来确定不同的函数,这样就组成了函数集合,不同的w,b可以来表达不同的分布函数。


Good of a Function


这里写图片描述
这里写图片描述

变换表达形式

这里写图片描述

两个Bernoulli distribution的交叉熵。所谓交叉熵,是用来刻画两个分布的相似性。在这里,交叉熵可以理解为真实分布与预测分布的相似度。同分布的话,交叉熵是0

这里写图片描述


Finding the best Function


这里写图片描述

这里写图片描述

这里写图片描述

上式表明预测值与真实值差距越大,则梯度下降时更新就越大。


逻辑回归+均方误差


这里写图片描述

这里写图片描述

离目标很近,微分为0,离目标很远时,微分也为0.

这里写图片描述

距离目标很远时,交叉熵的微分值会比较大,可以更快更大的更新参数。而均方误差,在距离目标很远时,有时候微分值会比较小,这样更新参数就会比较慢。当微分值比较小,设置较大的学习速率时,因为不能确定到底是距离目标值较远,还是较近(距离目标值较远,和较近,都有能可能微分值比较小),这也会产生矛盾。若是微分值比较小,距离目标较近,设置比较大的学习速率,会很快略过局部极值点。正常情况下,距离目标较近时,应该设置较小的学习速率,距离目标较远时,应该设置较大的学习速率。


Deep Learning会陷入局部最优解的问题

本部分内容转自:https://www.zhihu.com/question/38549801

对于deep learning,我们是在一个非常高维的世界里做梯度下降。这时的 local minimum 很难形成,因为局部最小值要求函数在所有维度上都是局部最小。更实际得情况是,函数会落到一个saddle-point上,如下图
这里写图片描述

在saddle-point上会有一大片很平坦的平原,让梯度几乎为0,导致无法继续下降。反倒是local/global minimum的问题,大家发现其实不同的local minimum其实差不多(反正都是over-fitting training data),一般难找到local minimum,找到的一般是saddle point.
对于saddle point, 可以使用momentum技术。

这里写图片描述
多层神经网络,大部分局部极小值都在底部 ,已经非常接近全局最小值,可参考上图。训练到底的全局最小值往往意味着过拟合 ,找到全局最小也许反而是件坏事。

•(Pascanu,Dauphin, Ganguli,Bengio,arXiv May 2014): On the saddle point problem for non-convex optimization
•(Dauphin,Pascanu,Gulcehre,Cho,Ganguli,Bengio,NIPS’2014):
identifying and attacking the saddle point problem in high-dimensional non-convex optimization
《Qualitatively characterizing neural network optimization problems》这篇也简单的论证了sgd中local minimum并不是大问题


这里写图片描述


Discriminative VS Generative


这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

判别模型仅仅是根据已经有的数据来去判断结果。而生成模型是可以根据已经有的数据来脑补数据来判别结果。如果采集的数据不够充分,那么判别模型的能力就会减弱。

这里写图片描述

生成模型在数据量较小,数据有噪声时,有时候会比判别模型有优势。


多分类


这里写图片描述

理论推导见Bishop, P209-210


逻辑回归的局限性


这里写图片描述
这里写图片描述

特征变换是一种思路


可视化空间变换demo

线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。
增加节点数:增加维度,即增加线性转换能力。
增加层数:增加激活函数的次数,即增加非线性转换次数。

深层学习为何要“Deep”(上)


这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

深度学习的每层都可以认为是一种特征变换,逐层生成不同的特征,进而达到更好的分类效果。


示例


垃圾邮件分类

SMSSpamCollection下载

import pandas as pd
df=pd.read_csv('SMSSpamCollection',delimiter='\t',header=None)
df.head()
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.cross_validation import train_test_split
#用pandas加载数据.csv文件,然后用train_test_split分成训练集(75%)和测试集(25%):
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[1],df[0])
#我们建一个TfidfVectorizer实例来计算TF-IDF权重:
vectorizer=TfidfVectorizer()
X_train=vectorizer.fit_transform(X_train_raw)
X_test=vectorizer.transform(X_test_raw)
#LogisticRegression同样实现了fit()和predict()方法
classifier=LogisticRegression()
classifier.fit(X_train,y_train)
predictions=classifier.predict(X_test)for i ,prediction in enumerate(predictions[-5:]):print '预测类型:%s.信息:%s' %(prediction,X_test_raw.iloc[i])
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
eval_sklearnLogistic = True
from sklearn.cross_validation import train_test_split,cross_val_score
from sklearn.cross_validation import train_test_split,cross_val_score
from sklearn.metrics import roc_curve,aucfrom sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report,accuracy_score,confusion_matrix
print("Start evaluating softmax regression model by sklearn...")
reg = LogisticRegression(solver="lbfgs", multi_class="multinomial")
newsklearntrain_labels = []
for i in range(sklearntrain_labels.shape[0]):#print i#print(int(sklearntrain_labels[i][1]))newsklearntrain_labels.append(int(sklearntrain_labels[i][1]))
#print(type(aa))reg.fit(sklearntrain_features, np.array(newsklearntrain_labels))
### 准确率
scores=cross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv=5)
print("The accuracy of the train set", np.mean(scores), scores)
### 精确率和召回率
precisions=cross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv=5, scoring='precision')
print("The precision of the train set", np.mean(precisions), precisions)
recalls = cross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv=5, scoring='recall')
print("The recall of the train set", np.mean(recalls), recalls)
plt.scatter(recalls, precisions)
### 计算综合评价指标
fls=cross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv=5,scoring='f1')
print("The f1 is:", np.mean(fls), fls)newvalid_labels = []
for i in range(valid_labels.shape[0]):#print i#print(int(sklearntrain_labels[i][1]))newvalid_labels.append(int(valid_labels[i][1]))
#print(type(aa))#np.savetxt('coef_softmax_sklearn.txt', reg.coef_, fmt='%.6f')  # Save coefficients to a text file
test_y_predict = reg.predict(valid_features)
print("Accuracy of test set: %f" % accuracy_score(np.array(newvalid_labels), test_y_predict))
#用混淆矩阵可视化函数画图
#from cm_plot import * #导入混淆矩阵可视化函数
cm_plot(np.array(newvalid_labels), tree.predict(valid_features)).show() #显示混淆矩阵可视化结果如下
### ROC AUC
test_y_predict=reg.predict_proba(valid_features)#每一类的概率
false_positive_rate, recall, thresholds = roc_curve(np.array(newvalid_labels), test_y_predict[:
, 1])
roc_auc=auc(false_positive_rate,recall)
plt.title('Receiver Operating Characteristic')
plt.plot(false_positive_rate, recall, 'b', label='AUC = %0.2f' % roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([0.0,1.0])
plt.ylim([0.0,1.0])
plt.ylabel('Recall')
plt.xlabel('Fall-out')
plt.show()print("The report is:",classification_report(np.array(newvalid_labels), test_y_predict))

详细参考

机器学习系列:(四)从线性回归到逻辑回归
Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)


参考文献


http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李宏毅机器学习课程6~~~深度学习入门

深度学习历史 深度学习经典步骤 神经网络的符合标记含义 Wij 代表的是从神经元j到神经元i,这样写的目的是便于表达,否则最后的表达式子就是Wij的转置,细节见下面。 每个神经元的偏执值组成一个向量b 单个神…

李宏毅机器学习课程7~~~反向传播

到底为什么基于反向传播的纯监督学习在过去表现不佳?Geoffrey Hinton总结了目前发现的四个方面问题: 带标签的数据集很小,只有现在的千分之一. 计算性能很慢,只有现在的百万分之一. 权重的初始化方式笨拙. 使用了错误的非线性模型…

李宏毅机器学习课程8~~~keras

keras keras示例 确定网络结构 确定损失函数 确定训练网络参数 batchsize与运算时间,平行运算,可以缩简运算时间。batchsize不能太大,这是由于内存的关系。此外,batchsize太大容易陷入局部极值点或者鞍点。batchsize=&…

李宏毅机器学习课程9~~~深度学习技巧

Recipe of Deep Learning Overfitting overfitting的判断是要训练误差与测试误差做比较。这个56-layer的网络在训练集上都没有训练好,说白了就是有点欠拟合。所以仅仅依靠测试集上的结果来判断56-layer比20-layer overfitting是不合理的。 更多理解见 Overfitting…

Liner(分段线性插值)

第一次写微博,记录自己的学习历程~~~~欢迎大家一起探讨~~~~ 分段线性插值故名思议就是说把给定样本点的区间分成多个不同区间,记为[xi,xi1],在每个区间上的一次线性方程为: 关于其证明: 分段线性插值在速度和误差取得…

在linux设置回收站 - 防止失误操作造成数据清空,并定期清理

安装trash sudo apt-get install trash-chi 原理 执行trash命令后,是将文件移动了用户的回收站,每个用户的回收站路径为$HOME/.local/share/Trash,比如用户asin的回收站位于/home/asin/.local/share/Trash,用户root的回收站位于…

Spline(三次样条插值)

关于三次样条插值,计算方法比较复杂,但是静下心来仔细研究也是可以理解的。 本文借鉴文章来源:http://www.cnki.com.cn/Article/CJFDTotal-BGZD200611035.htm 定义: 简单来说就是给定了一些在区间[a,b]的数据点{x1,x2,x3.....xn…

李宏毅机器学习课程10~~~卷积神经网络

卷积的意义 数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像…

matlab自带的插值函数interp1的四种插值方法

x0:2*pi; ysin(x); xx0:0.5:2*pi;%interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1interp1(x,y,xx); figure plot(x,y,o,xx,y1,r) title(分段线性插值)%临近插值 y2interp1(x,y,xx,nearest); figure plot(x,y,o,xx,y2,r); …

拉格朗日插值法(Lagrange)

拉格朗日插值法是基于基函数的插值方法,插值多项式可以表示为: 其中称为 i 次基函数 Matlab中拉格朗日插值法函数为:Language 功能:求已知点数据点的拉格朗日多项式 调用格式:fLagrange(x,y) 或者 f ’Lagrange(x,y,x0) 其中&a…

当你在应用机器学习时你应该想什么

如今, 机器学习变得十分诱人, 它已在网页搜索, 商品推荐, 垃圾邮件检测, 语音识别, 图像识别, 自然语言处理等诸多领域发挥重要作用. 和以往我们显式地通过编程告诉计算机如何进行计算不同, 机器学习是一种数据驱动方法(data-driven approach). 然而, 有时候机器学习像是一种”…

利用均差的牛顿插值法(Newton)

函数f的零阶均差定义为 ,一阶定义均差为: 一般地,函数f 的k阶均差定义为: 或者上面这个式子求的k1阶均差 利用均差的牛顿插值法多项式为: 简单计算的时候可以观看下面的差商(均差)表&#xff1a…

深度学习(Deep Learning)读书思考三:正则化

概述 正则化是机器学习中非常重要并且非常有效的减少泛华误差的技术,特别是在深度学习模型中,由于其模型参数非常多非常容易产生过拟合。因此研究者也提出很多有效的技术防止过拟合,比较常用的技术包括: 参数添加约束,…

利用差分的牛顿插值法(Newton)

差分牛顿插值法要求是等距的。 先来看三个概念 差分与均差的关系如下: 牛顿(Newton)插值的基本公式为: 由于差分插值是等距的,所以可以设xx0nh 对于上式 再由差分和均差的关系,可以将上面的黄色部分也就是牛顿插值基本公式转换…

埃尔米特(Hermite)插值

Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值。对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况。在此情况下,n个节点x1,x2,……

keras创建模型

关于Keras模型 Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。 Sequential models:这种方法用于实…

多项式曲线拟合最小二乘法

对给定的试验数据点(xi,yi)(i1,2,……,n),可以构造m次多项式 数据拟合的最简单的做法就是使误差p(xi)-yi的平方和最小 当前任务就是求一个P(x)使得 从几何意义上讲就是寻求给与定点(xi,yi)距离的平方和最小的曲线yp(x),函数p(x)称为拟合函数或者是最小二乘解&#x…

运动合成——机器学习技术

参考文献:《人体运动合成中的机器学习技术合成综述》 根据机器学习的用途分类,在图形学中使用到的大致如下: 1> 回归和函数逼近。回归是一种插值技术,分析已知数据点来合成新的数据。 2> 降维。从高维数的运动数据…

ICA独立成分分析—FastICA基于负熵最大

1. 概念 官方解释:利用统计原理进行计算的方法,是一种线性变换。 ICA分为基于信息论准则的迭代算法和基于统计学的代数方法两大类,如FastICA算法,Infomax算法,最大似然估计算法等。 这里主要讨论FastICA算法。 先来…

tensorboard的可视化及模型可视化

待整理 How to Check-Point Deep Learning Models in Keras LossWise Tensorboard 中文社区 谷歌发布TensorBoard API,让你自定义机器学习中的可视化 查找tensorflow安装的位置 pip show tensorflow-gpu Name: tensorflow-gpu Version: 1.0.1 Summary: TensorFl…