李宏毅机器学习课程5~~~分类:逻辑回归
Function Set
不同的w,b來(lái)確定不同的函數(shù),這樣就組成了函數(shù)集合,不同的w,b可以來(lái)表達(dá)不同的分布函數(shù)。
Good of a Function
變換表達(dá)形式
兩個(gè)Bernoulli distribution的交叉熵。所謂交叉熵,是用來(lái)刻畫(huà)兩個(gè)分布的相似性。在這里,交叉熵可以理解為真實(shí)分布與預(yù)測(cè)分布的相似度。同分布的話,交叉熵是0
Finding the best Function
上式表明預(yù)測(cè)值與真實(shí)值差距越大,則梯度下降時(shí)更新就越大。
邏輯回歸+均方誤差
離目標(biāo)很近,微分為0,離目標(biāo)很遠(yuǎn)時(shí),微分也為0.
距離目標(biāo)很遠(yuǎn)時(shí),交叉熵的微分值會(huì)比較大,可以更快更大的更新參數(shù)。而均方誤差,在距離目標(biāo)很遠(yuǎn)時(shí),有時(shí)候微分值會(huì)比較小,這樣更新參數(shù)就會(huì)比較慢。當(dāng)微分值比較小,設(shè)置較大的學(xué)習(xí)速率時(shí),因?yàn)椴荒艽_定到底是距離目標(biāo)值較遠(yuǎn),還是較近(距離目標(biāo)值較遠(yuǎn),和較近,都有能可能微分值比較小),這也會(huì)產(chǎn)生矛盾。若是微分值比較小,距離目標(biāo)較近,設(shè)置比較大的學(xué)習(xí)速率,會(huì)很快略過(guò)局部極值點(diǎn)。正常情況下,距離目標(biāo)較近時(shí),應(yīng)該設(shè)置較小的學(xué)習(xí)速率,距離目標(biāo)較遠(yuǎn)時(shí),應(yīng)該設(shè)置較大的學(xué)習(xí)速率。
Deep Learning會(huì)陷入局部最優(yōu)解的問(wèn)題
本部分內(nèi)容轉(zhuǎn)自:https://www.zhihu.com/question/38549801
對(duì)于deep learning,我們是在一個(gè)非常高維的世界里做梯度下降。這時(shí)的 local minimum 很難形成,因?yàn)榫植孔钚≈狄蠛瘮?shù)在所有維度上都是局部最小。更實(shí)際得情況是,函數(shù)會(huì)落到一個(gè)saddle-point上,如下圖
在saddle-point上會(huì)有一大片很平坦的平原,讓梯度幾乎為0,導(dǎo)致無(wú)法繼續(xù)下降。反倒是local/global minimum的問(wèn)題,大家發(fā)現(xiàn)其實(shí)不同的local minimum其實(shí)差不多(反正都是over-fitting training data),一般難找到local minimum,找到的一般是saddle point.
對(duì)于saddle point, 可以使用momentum技術(shù)。
多層神經(jīng)網(wǎng)絡(luò),大部分局部極小值都在底部 ,已經(jīng)非常接近全局最小值,可參考上圖。訓(xùn)練到底的全局最小值往往意味著過(guò)擬合 ,找到全局最小也許反而是件壞事。
?(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》這篇也簡(jiǎn)單的論證了sgd中l(wèi)ocal minimum并不是大問(wèn)題
Discriminative VS Generative
判別模型僅僅是根據(jù)已經(jīng)有的數(shù)據(jù)來(lái)去判斷結(jié)果。而生成模型是可以根據(jù)已經(jīng)有的數(shù)據(jù)來(lái)腦補(bǔ)數(shù)據(jù)來(lái)判別結(jié)果。如果采集的數(shù)據(jù)不夠充分,那么判別模型的能力就會(huì)減弱。
生成模型在數(shù)據(jù)量較小,數(shù)據(jù)有噪聲時(shí),有時(shí)候會(huì)比判別模型有優(yōu)勢(shì)。
多分類(lèi)
理論推導(dǎo)見(jiàn)Bishop, P209-210
邏輯回歸的局限性
特征變換是一種思路
可視化空間變換demo
線性可分視角:神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)就是學(xué)習(xí)如何利用矩陣的線性變換加激活函數(shù)的非線性變換,將原始輸入空間投向線性可分/稀疏的空間去分類(lèi)/回歸。 增加節(jié)點(diǎn)數(shù):增加維度,即增加線性轉(zhuǎn)換能力。 增加層數(shù):增加激活函數(shù)的次數(shù),即增加非線性轉(zhuǎn)換次數(shù)。深層學(xué)習(xí)為何要“Deep”(上)
深度學(xué)習(xí)的每層都可以認(rèn)為是一種特征變換,逐層生成不同的特征,進(jìn)而達(dá)到更好的分類(lèi)效果。
示例
垃圾郵件分類(lèi)
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加載數(shù)據(jù).csv文件,然后用train_test_split分成訓(xùn)練集(75%)和測(cè)試集(25%): X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[1],df[0]) #我們建一個(gè)TfidfVectorizer實(shí)例來(lái)計(jì)算TF-IDF權(quán)重: vectorizer=TfidfVectorizer() X_train=vectorizer.fit_transform(X_train_raw) X_test=vectorizer.transform(X_test_raw) #LogisticRegression同樣實(shí)現(xiàn)了fit()和predict()方法 classifier=LogisticRegression() classifier.fit(X_train,y_train) predictions=classifier.predict(X_test)for i ,prediction in enumerate(predictions[-5:]):print '預(yù)測(cè)類(lèi)型:%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)) ### 準(zhǔn)確率 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) ### 計(jì)算綜合評(píng)價(jià)指標(biāo) 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)) #用混淆矩陣可視化函數(shù)畫(huà)圖 #from cm_plot import * #導(dǎo)入混淆矩陣可視化函數(shù) cm_plot(np.array(newvalid_labels), tree.predict(valid_features)).show() #顯示混淆矩陣可視化結(jié)果如下 ### ROC AUC test_y_predict=reg.predict_proba(valid_features)#每一類(lèi)的概率 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))詳細(xì)參考
機(jī)器學(xué)習(xí)系列:(四)從線性回歸到邏輯回歸
Python_sklearn機(jī)器學(xué)習(xí)庫(kù)學(xué)習(xí)筆記(三)logistic regression(邏輯回歸)
參考文獻(xiàn)
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
總結(jié)
以上是生活随笔為你收集整理的李宏毅机器学习课程5~~~分类:逻辑回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中信京东PLUS联名卡怎么领取会员?没到
- 下一篇: 李宏毅机器学习课程6~~~深度学习入门