齐大胜请于果做网站是第几集,五易网络,wordpress输入命令,中国机械采购平台Function Set 不同的w#xff0c;b来确定不同的函数#xff0c;这样就组成了函数集合#xff0c;不同的w#xff0c;b可以来表达不同的分布函数。 Good of a Function 变换表达形式 两个Bernoulli distribution的交叉熵。所谓交叉熵#xff0c;是用来刻画两个分布的相似性…
Function Set 不同的wb来确定不同的函数这样就组成了函数集合不同的wb可以来表达不同的分布函数。 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
dfpd.read_csv(SMSSpamCollection,delimiter\t,headerNone)
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权重
vectorizerTfidfVectorizer()
X_trainvectorizer.fit_transform(X_train_raw)
X_testvectorizer.transform(X_test_raw)
#LogisticRegression同样实现了fit()和predict()方法
classifierLogisticRegression()
classifier.fit(X_train,y_train)
predictionsclassifier.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(solverlbfgs, multi_classmultinomial)
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))
### 准确率
scorescross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv5)
print(The accuracy of the train set, np.mean(scores), scores)
### 精确率和召回率
precisionscross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv5, scoringprecision)
print(The precision of the train set, np.mean(precisions), precisions)
recalls cross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv5, scoringrecall)
print(The recall of the train set, np.mean(recalls), recalls)
plt.scatter(recalls, precisions)
### 计算综合评价指标
flscross_val_score(reg,sklearntrain_features,np.array(newsklearntrain_labels),cv5,scoringf1)
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_predictreg.predict_proba(valid_features)#每一类的概率
false_positive_rate, recall, thresholds roc_curve(np.array(newvalid_labels), test_y_predict[:
, 1])
roc_aucauc(false_positive_rate,recall)
plt.title(Receiver Operating Characteristic)
plt.plot(false_positive_rate, recall, b, labelAUC %0.2f % roc_auc)
plt.legend(loclower 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