開源 NLP 中文面試學習資料:面向演算法面試,理論程式碼俱全!
- 2019 年 10 月 10 日
- 筆記
基礎到什麼是線性、非線性:

進一步到損失函數如何計算,過擬合、欠擬合如何解決:

再到應用場景:



沒有多餘的廢話,儘是知識要點。拿著這樣一份重點筆記有針對性地學習、複習,豈不爽哉?
光看理論記不住?放心,每一節的文末都有配套的課後習題,邊學邊練,事半功倍。
課後習題不僅包括題目、數據和程式碼實現,項目作者還結合自身的經驗,把整個解題的思路完整呈現了出來,可以參考學習。
比如機器學習入門中的經典題房價預測。
題目是:
從給定的房屋基本資訊以及房屋銷售資訊等,建立一個回歸模型預測房屋的銷售價格。 測試數據主要包括3000條記錄,13個欄位,跟訓練數據不同的是測試數據並不包括房屋銷售價格,學員需要通過由訓練數據所建立的模型以及所給的測試數據,得出測試數據相應的房屋銷售價格預測。

腦子一團漿糊不知道從何著手?
可以參考一下作者的思路:

1、選擇合適的模型,比如這裡,選擇多元線性回歸模型。

2、對缺失的值進行補齊操作,可以使用均值的方式補齊數據,使得準確度更高。
3、數據的取值一般跟屬性有關,為了提高預測的準確度,需統一數據維度進行計算,方法有特徵縮放和歸一法等。
#讀取數據 housing = pd.read_csv('kc_train.csv') target=pd.read_csv('kc_train2.csv') #銷售價格 t=pd.read_csv('kc_test.csv') #測試數據 #數據預處理 housing.info() #查看是否有缺失值 #特徵縮放 from sklearn.preprocessing import MinMaxScaler minmax_scaler=MinMaxScaler() minmax_scaler.fit(housing) #進行內部擬合,內部參數會發生變化 scaler_housing=minmax_scaler.transform(housing) scaler_housing=pd.DataFrame(scaler_housing,columns=housing.columns)
4、調用模型庫進行訓練。
#選擇基於梯度下降的線性回歸模型 from sklearn.linear_model import LinearRegression LR_reg=LinearRegression() #進行擬合 LR_reg.fit(scaler_housing,target) #使用均方誤差用於評價模型好壞 from sklearn.metrics import mean_squared_error preds=LR_reg.predict(scaler_housing) #輸入數據進行預測得到結果 mse=mean_squared_error(preds,target) #使用均方誤差來評價模型好壞,可以輸出mse進行查看評價值 #繪圖進行比較 plot.figure(figsize=(10,7)) #畫布大小 num=100 x=np.arange(1,num+1) #取100個點進行比較 plot.plot(x,target[:num],label='target') #目標取值 plot.plot(x,preds[:num],label='preds') #預測取值 plot.legend(loc='upper right') #線條顯示位置 plot.show()
5、使用測試數據進行目標函數預測輸出,觀察結果是否符合預期。或者通過畫出對比函數進行結果線條對比。

當然,最後都會附上參考答案。

NLP部分也是一樣的節奏,比如全局向量詞嵌入(GloVe)。
先說明概念:
GloVe的全稱叫Global Vectors for Word Representation,它是一個基於全局詞頻統計(count-based & overall statistics)的詞表徵(word representation)工具,它可以把一個單詞表達成一個由實數組成的向量,這些向量捕捉到了單詞之間一些語義特性,比如相似性(similarity)、類比性(analogy)等。我們通過對向量的運算,比如歐幾里得距離或者cosine相似度,可以計算出兩個單詞之間的語義相似性。
再詳述實現步驟:
1、構建共現矩陣。

2、詞向量和共現矩陣的近似關係。

3、構造損失函數。

4、訓練GloVe模型。

還分析了一番GloVe與LSA(Latent Semantic Analysis,潛在語義分析)、Word2Vec(詞嵌入)的比較。
LSA(Latent Semantic Analysis)是一種比較早的count-based的詞向量表徵工具,它也是基於co-occurance matrix的,只不過採用了基於奇異值分解(SVD)的矩陣分解技術對大矩陣進行降維,而我們知道SVD的複雜度是很高的,所以它的計算代價比較大。還有一點是它對所有單詞的統計權重都是一致的。而這些缺點在GloVe中被一一克服了。 而word2vec最大的缺點則是沒有充分利用所有的語料,所以GloVe其實是把兩者的優點結合了起來。從這篇論文給出的實驗結果來看,GloVe的性能是遠超LSA和word2vec的,但網上也有人說GloVe和word2vec實際表現其實差不多。
最後,還是附上程式碼實現。
