最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nlp自然語言處理基于SVD的降維優(yōu)化學習

 更新時間:2022年04月05日 15:50:52   作者:jym蒟蒻  
這篇文章主要為大家介紹了nlp自然語言處理基于SVD的降維優(yōu)化學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪

基于SVD的降維優(yōu)化

向量降維:盡量保留數據“重要信息”的基礎上減少向量維度。可以發(fā)現(xiàn)重要的軸(數據分布廣的軸),將二維數據 表示為一維數據,用新軸上的投影值來表示各個數據點的值,示意圖如下。

稀疏矩陣和密集矩陣轉換:大多數元素為0的矩陣稱為稀疏矩陣,從稀疏矩陣中找出重要的軸,用更少的維度對其進行重新表示。結果,稀疏矩陣就會被轉化為大多數元素均不為0的密集矩陣。這個密集矩陣就是我們想要的單詞的分布式表示。

奇異值分解(Singular Value Decomposition,SVD):任意的矩陣X分解為U、S、V,3個矩陣的乘積,其中U和V是列向量彼此正交的正交矩陣,S是除了對角線元素以外其余元素均為0的對角矩陣。

關于SVD是怎么回事,從代碼中分析:

代碼中使用 NumPy 的 linalg 模塊中的 svd 方法,如下。

U, S, V = np.linalg.svd(W)

我們輸出C、W、U、S、V,如下所示,可以看出,C是共現(xiàn)矩陣、W是PPMI矩陣。可以看到S矩陣是降序排列的。

[0 1 0 0 0 0 0]
[1 0 1 0 1 1 0]
[0 1 0 1 0 0 0]
[0 0 1 0 1 0 0]
[0 1 0 1 0 0 0]
[0 1 0 0 0 0 1]
[0 0 0 0 0 1 0]

[[0.    1.807 0.    0.    0.    0.    0.   ]
 [1.807 0.    0.807 0.    0.807 0.807 0.   ]
 [0.    0.807 0.    1.807 0.    0.    0.   ]
 [0.    0.    1.807 0.    1.807 0.    0.   ]
 [0.    0.807 0.    1.807 0.    0.    0.   ]
 [0.    0.807 0.    0.    0.    0.    2.807]
 [0.    0.    0.    0.    0.    2.807 0.   ]]
 
[[-3.409e-01 -1.110e-16 -3.886e-16 -1.205e-01  0.000e+00  9.323e-01  2.664e-16]
 [ 0.000e+00 -5.976e-01  1.802e-01  0.000e+00 -7.812e-01  0.000e+00  0.000e+00]
 [-4.363e-01 -4.241e-17 -2.172e-16 -5.088e-01 -1.767e-17 -2.253e-01  -7.071e-01]
 [-2.614e-16 -4.978e-01  6.804e-01 -4.382e-17  5.378e-01  9.951e-17  -3.521e-17]
 [-4.363e-01 -3.229e-17 -1.654e-16 -5.088e-01 -1.345e-17 -2.253e-01  7.071e-01]
 [-7.092e-01 -3.229e-17 -1.654e-16  6.839e-01 -1.345e-17 -1.710e-01  9.095e-17]
 [ 3.056e-16 -6.285e-01 -7.103e-01  7.773e-17  3.169e-01 -2.847e-16  4.533e-17]]

  
[3.168e+00 3.168e+00 2.703e+00 2.703e+00 1.514e+00 1.514e+00 1.484e-16]

[[ 0.000e+00 -5.976e-01 -2.296e-16 -4.978e-01 -1.186e-16  2.145e-16  -6.285e-01]
 [-3.409e-01 -1.110e-16 -4.363e-01  0.000e+00 -4.363e-01 -7.092e-01  0.000e+00]
 [ 1.205e-01 -5.551e-16  5.088e-01  0.000e+00  5.088e-01 -6.839e-01  0.000e+00]
 [-0.000e+00 -1.802e-01 -1.586e-16 -6.804e-01  6.344e-17  9.119e-17  7.103e-01]
 [-9.323e-01 -5.551e-17  2.253e-01  0.000e+00  2.253e-01  1.710e-01  0.000e+00]
 [-0.000e+00  7.812e-01  2.279e-16 -5.378e-01  3.390e-16 -2.717e-16  -3.169e-01]
 [ 0.000e+00  2.632e-16 -7.071e-01  8.043e-18  7.071e-01  9.088e-17  1.831e-17]]

下面研究U、S、V矩陣究竟是什么,添加如下代碼。

print("______________________")
jym = np.dot(V, U)
print(jym)
print("______________________")
jym2 = np.dot(U, V)
print(jym2)
print("______________________")
V2 = np.transpose(V)
jb = np.dot(V, V2)
print(jb)

輸出如下,那就可以把U和V的性質給搞懂了。從jb = np.dot(V, V2),輸出jb矩陣是單位矩陣,可知,V和U是正交矩陣。jym = np.dot(V, U),輸出jym主對角線元素全為0。U和V是列向量彼此正交的,公式里面把V轉置了也就是說,U的列向量和代碼里的V的行向量是正交的,所以用V乘U,他們的對角元是0。

[[-6.212e-17  1.000e+00  1.015e-08  2.968e-16 -5.249e-09  1.712e-16  6.754e-17]
 [ 1.000e+00  1.597e-16  3.967e-16 -2.653e-08  1.099e-16 -1.336e-08  -5.293e-09]
 [ 2.653e-08  3.025e-16 -2.284e-16 -1.000e+00  4.270e-16  1.110e-08  5.760e-09]
 [ 3.718e-16 -1.015e-08 -1.000e+00  1.958e-16  4.416e-10 -2.641e-16  2.132e-16]
 [ 1.336e-08  1.143e-16  2.378e-16  1.110e-08  3.405e-17 -1.000e+00  -2.662e-09]
 [-1.096e-17  5.249e-09  4.416e-10 -4.753e-16 -1.000e+00 -4.458e-17  8.307e-17]
 [-5.293e-09 -1.657e-16  7.657e-17 -5.760e-09 -1.925e-16  2.662e-09  1.000e+00]]

[[-8.977e-18  9.539e-01 -2.775e-17 -2.497e-01  3.879e-16  7.108e-18  -1.668e-01]
 [ 9.539e-01  9.667e-18  1.764e-01  0.000e+00  1.764e-01  1.670e-01  0.000e+00]
 [ 4.757e-18  1.764e-01  5.000e-01  6.846e-01 -5.000e-01  3.262e-17  -1.578e-02]
 [-2.497e-01 -1.105e-16  6.846e-01  1.064e-16  6.846e-01 -2.032e-02  1.016e-16]
 [ 3.622e-18  1.764e-01 -5.000e-01  6.846e-01  5.000e-01  1.192e-16  -1.578e-02]
 [ 3.622e-18  1.670e-01 -1.220e-16 -2.032e-02  6.079e-17  9.043e-17  9.857e-01]
 [-1.668e-01  2.741e-17 -1.578e-02 -5.192e-17 -1.578e-02  9.857e-01  -4.663e-17]]

[[ 1.000e+00  6.620e-17  7.901e-18 -1.015e-08 -8.632e-18  5.249e-09  -9.431e-17]
 [ 6.620e-17  1.000e+00  2.653e-08 -3.141e-18  1.336e-08 -1.414e-16  -5.293e-09]
 [ 7.901e-18  2.653e-08  1.000e+00 -1.074e-17 -1.110e-08  4.054e-17  5.760e-09]
 [-1.015e-08 -3.141e-18 -1.074e-17  1.000e+00  4.150e-18 -4.416e-10  1.171e-16]
 [-8.632e-18  1.336e-08 -1.110e-08  4.150e-18  1.000e+00  3.792e-17  -2.662e-09]
 [ 5.249e-09 -1.414e-16  4.054e-17 -4.416e-10  3.792e-17  1.000e+00  2.740e-16]
 [-9.431e-17 -5.293e-09  5.760e-09  1.171e-16 -2.662e-09  2.740e-16  1.000e+00]]

SVD的直觀意義

U是正交矩陣。這個正交矩陣構成了一些空間中的基軸 (基向量),可以將矩陣U作為“單詞空間”。 S是對角矩陣,奇異值在對角線上降序排列,奇異值的大小也就意味著“對應的基軸”的重要性。奇異值小,對應基軸重要性就小,所以可以通過去除U矩陣中的多余的列向量來近似原始矩陣。從而把單詞向量用降維后的矩陣表示。示意圖如下。

稀疏向量W經過 SVD 被轉化成了密集向量U。如果要對這個密集向量降維,比如把它降維到二維向量,取出U的前兩個元素即可。

text = 'You say goodbye and I say hello.'
corpus, word_to_id, id_to_word = preprocess(text)
vocab_size = len(id_to_word)
C = create_co_matrix(corpus, vocab_size, window_size=1)
W = ppmi(C)
# SVD
U, S, V = np.linalg.svd(W)
np.set_printoptions(precision=3)  # 有效位數為3位
for i in range(7):
    print(C[i])
print(U)
# plot
for word, word_id in word_to_id.items():
    plt.annotate(word, (U[word_id, 0], U[word_id, 1]))
plt.scatter(U[:,0], U[:,1], alpha=0.5)
plt.show()

輸出的U:

[[-3.409e-01 -1.110e-16 -3.886e-16 -1.205e-01  0.000e+00  9.323e-01
   2.664e-16]
 [ 0.000e+00 -5.976e-01  1.802e-01  0.000e+00 -7.812e-01  0.000e+00
   0.000e+00]
 [-4.363e-01 -4.241e-17 -2.172e-16 -5.088e-01 -1.767e-17 -2.253e-01
  -7.071e-01]
 [-2.614e-16 -4.978e-01  6.804e-01 -4.382e-17  5.378e-01  9.951e-17
  -3.521e-17]
 [-4.363e-01 -3.229e-17 -1.654e-16 -5.088e-01 -1.345e-17 -2.253e-01
   7.071e-01]
 [-7.092e-01 -3.229e-17 -1.654e-16  6.839e-01 -1.345e-17 -1.710e-01
   9.095e-17]
 [ 3.056e-16 -6.285e-01 -7.103e-01  7.773e-17  3.169e-01 -2.847e-16
   4.533e-17]]

用二維向量表示各個單詞,并把它們畫在圖上,畫出的圖如下:goodbye 和 hello、you 和 i 位置接近,這個結果復合之前做的基于余弦相似度的結果。

以上就是nlp自然語言處理基于SVD的降維優(yōu)化學習的詳細內容,更多關于nlp自然語言處理SVD的降維優(yōu)化的資料請關注腳本之家其它相關文章!

相關文章

  • python中ASCII碼和字符的轉換方法

    python中ASCII碼和字符的轉換方法

    今天小編就為大家分享一篇python中ASCII碼和字符的轉換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 用C++封裝MySQL的API的教程

    用C++封裝MySQL的API的教程

    這篇文章主要介紹了用C++封裝MySQL的API的教程,包括對語句拼裝器SQLJoin的介紹,需要的朋友可以參考下
    2015-05-05
  • 如何使用Python進行數據分析之方差分析詳解

    如何使用Python進行數據分析之方差分析詳解

    這篇文章主要給大家介紹了關于如何使用Python進行數據分析之方差分析的相關資料,方差分析是一種常用的對數據進行分析的方法,用于兩個及兩個以上樣本均數和方差差別的顯著性檢驗,需要的朋友可以參考下
    2024-03-03
  • Python實現(xiàn)點云投影到平面顯示

    Python實現(xiàn)點云投影到平面顯示

    今天小編就為大家分享一篇Python實現(xiàn)點云投影到平面顯示,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • pygame實現(xiàn)貪吃蛇游戲

    pygame實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python中with語句結合上下文管理器操作詳解

    python中with語句結合上下文管理器操作詳解

    這篇文章主要給大家介紹了關于python中with語句結合上下文管理器操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • 利用Python編寫一個藏頭詩在線生成器

    利用Python編寫一個藏頭詩在線生成器

    這篇文章主要介紹了如何利用Python編寫一個藏頭詩在線生成器,文中的示例代碼講解詳細,感興趣的同學可以跟隨小編一起動手嘗試一下
    2022-04-04
  • python列表:開始、結束、步長值實例

    python列表:開始、結束、步長值實例

    這篇文章主要介紹了python列表:開始、結束、步長值實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • wtfPython—Python中一組有趣微妙的代碼【收藏】

    wtfPython—Python中一組有趣微妙的代碼【收藏】

    Wtfpython講解了大量的Python編譯器的內容。這篇文章主要介紹了wtfPython-Python中一些奇妙的代碼,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-08-08
  • Python 中的 else詳解

    Python 中的 else詳解

    這篇文章主要介紹了Python 中的 else詳解的相關資料,需要的朋友可以參考下
    2016-04-04

最新評論

上思县| 东阳市| 固始县| 海晏县| 长丰县| 册亨县| 灌云县| 蚌埠市| 新乡市| 寿宁县| 双牌县| 大悟县| 邳州市| 台东县| 苏州市| 高淳县| 吉木乃县| 壶关县| 江安县| 马鞍山市| 郑州市| 松阳县| 东乡族自治县| 舟山市| 哈尔滨市| 四子王旗| 鞍山市| 集贤县| 三亚市| 东明县| 乃东县| 泰来县| 汝阳县| 平果县| 尉犁县| 安达市| 胶南市| 东光县| 开化县| 平阴县| 湖南省|