日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李宏毅机器学习课程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

總結

以上是生活随笔為你收集整理的李宏毅机器学习课程5~~~分类:逻辑回归的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。