python向量的模
『壹』 python中DW模型怎麼寫
向量空間模型(Vector Space Model,簡稱VSM)表示通過向量的方式來表徵文本。一個文檔(Document)被描述為一系列關鍵詞(Term)的向量。
簡言之,判斷一篇文章是否是你喜歡的文章,即將文章抽象成一個向量,該向量由n個詞Term組成,每個詞都有一個權重(Term Weight),不同的詞根據自己在文檔中的權重來影響文檔相關性的重要程度。
Document = { term1, term2, …… , termN }
Document Vector = { weight1, weight2, …… , weightN }
『貳』 python計算每兩個向量之間的距離並保持到矩陣中
在很多演算法中都會涉及到求向量歐式距離,例如機器學習中的KNN演算法,就需要對由訓練集A和測試集B中的向量組成的所有有序對(Ai,Bi),求出Ai和Bi的歐式距離。這樣的話就會帶來一個二重的嵌套循環,在向量集很大時效率不高。
這里介紹如何將這一過程用矩陣運算實現。
假設有兩個三維向量集,用矩陣表示:
A=[a11a12a21a22a31a32]
B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥
要求A,B兩個集合中的元素兩兩間歐氏距離。
先求出ABT:
ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥
然後對A和BT分別求其中每個向量的模平方,並擴展為2*3矩陣:
Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥
Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥
然後:
Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥
將上面這個矩陣一開平方,就得到了A,B向量集兩兩間的歐式距離了。
下面是Python實現:
import numpy
def EuclideanDistances(A, B):
BT = B.transpose()
vecProd = A * BT
SqA = A.getA()**2
sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))
sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))
SqB = B.getA()**2
sumSqB = numpy.sum(SqB, axis=1)
sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))
SqED = sumSqBEx + sumSqAEx - 2*vecProd
ED = (SqED.getA())**0.5
return numpy.matrix(ED)
『叄』 如何利用 Python 實現 SVM 模型
我先直觀地闡述我對SVM的理解,這其中不會涉及數學公式,然後給出Python代碼。
SVM是一種二分類模型,處理的數據可以分為三類:
線性可分,通過硬間隔最大化,學習線性分類器
近似線性可分,通過軟間隔最大化,學習線性分類器
線性不可分,通過核函數以及軟間隔最大化,學習非線性分類器
線性分類器,在平面上對應直線;非線性分類器,在平面上對應曲線。
硬間隔對應於線性可分數據集,可以將所有樣本正確分類,也正因為如此,受雜訊樣本影響很大,不推薦。
軟間隔對應於通常情況下的數據集(近似線性可分或線性不可分),允許一些超平面附近的樣本被錯誤分類,從而提升了泛化性能。
如下圖:
我們可以看到,當支持向量太少,可能會得到很差的決策邊界。如果支持向量太多,就相當於每次都利用整個數據集進行分類,類似KNN。『肆』 python給定坐標求三角形周長
輸入的參數格式為x1,y1,x2,y2,x3,y3的話,這樣寫是不行的。你寫的那個,輸入參數應該用空格隔開。想實現用逗號隔開。需要這樣寫:
a,b,c,d,e,f=map(int,input().split(','))
A=((c-a)**2+(d-a)**2)**0.5
B=((e-c)**2+(f-d)**2)**0.5
C=((e-a)**2+(f-b)**2)**0.5
D=A+B+C
print(('%.2f'%D))
『伍』 python svm 怎麼訓練模型
支持向量機SVM(Support Vector Machine)是有監督的分類預測模型,本篇文章使用機器學習庫scikit-learn中的手寫數字數據集介紹使用Python對SVM模型進行訓練並對手寫數字進行識別的過程。
准備工作
手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。在機器學習sklearn庫中已經包含了不同數字的8X8灰度值矩陣,因此我們首先導入sklearn庫自帶的datasets數據集。然後是交叉驗證庫,SVM分類演算法庫,繪制圖表庫等。
12345678910#導入自帶數據集from sklearn import datasets#導入交叉驗證庫from sklearn import cross_validation#導入SVM分類演算法庫from sklearn import svm#導入圖表庫import matplotlib.pyplot as plt#生成預測結果准確率的混淆矩陣from sklearn import metrics讀取並查看數字矩陣
從sklearn庫自帶的datasets數據集中讀取數字的8X8矩陣信息並賦值給digits。
12#讀取自帶數據集並賦值給digitsdigits = datasets.load_digits()查看其中的數字9可以發現,手寫的數字9以64個灰度值保存。從下面的8×8矩陣中很難看出這是數字9。
12#查看數據集中數字9的矩陣digits.data[9]以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。我們的模型所要做的就是在已知64個灰度值與每個數字對應關系的情況下,通過對模型進行訓練來對新的手寫數字對應的真實數字進行分類。
1234#繪制圖表查看數據集中數字9的圖像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation='nearest')plt.title('digits.target[9]')plt.show()
從混淆矩陣中可以看到,大部分的數字SVM的分類和預測都是正確的,但也有個別的數字分類錯誤,例如真實的數字2,SVM模型有一次錯誤的分類為1,還有一次錯誤分類為7。
『陸』 python怎麼構建二類分類模型
向量空間模型(Vector Space Model,簡稱VSM)表示通過向量的方式來表徵文本。一個文檔(Document)被描述為一系列關鍵詞(Term)的向量。
簡言之,判斷一篇文章是否是你喜歡的文章,即將文章抽象成一個向量,該向量由n個詞Term組成,每個詞都有一個權重(Term Weight),不同的詞根據自己在文檔中的權重來影響文檔相關性的重要程度。
Document = { term1, term2, …… , termN }
Document Vector = { weight1, weight2, …… , weightN }
『柒』 python3有哪些可以操作向量的庫
numpy庫。和matlab相似的語法和操作。 不要聽一樓的亂說。能用python3的就用python3.
『捌』 Python中怎樣計算兩個向量的內積
這是從物理實踐中來,在物理計算中,經常會用到一個向量投影到另一個向量的方向,然後再乘以另一個向量的模.而且這樣的演算法表示固定的物理意義.由於經常會遇到這種問題,於是有人就這樣定義了內積,是為了便於書寫和直觀辨認.一個式子太長或太復雜就會給計算帶來很多的不便,定義了簡便的式子有助有從數學上理解物理.至於為什麼兩個向量的內積是常數,這就是定義,定義成常數罷了.內積的公式還是很簡單的,外積的就復雜得多.