python學習積累之高斯聚類中的點點

2021-09-19 15:10:33 字數 2926 閱讀 4487

2019.4.24

1、字串的操作:

for line in fr.readlines():

curline = line.strip().split('\t')

#str.strip(chars) :用於移除字串頭尾指定的字元chars(預設為空格或換行符)或字串行;該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。

#str.split(chars): 將str資料由chars分隔開;

2、map函式的用法:

map(?,l)的作用:

1)對l中的每乙個元素進行操作;

2)list(map(?,l),是對l中的每乙個元素都進行?操作;

3)匿名函式,當我們對?這部分不想單獨寫乙個函式的時候就可以用lambda來寫出乙個函式;其中 : 號的作用是將引數與函式體分開,之後進行傳參操作就可以了;

l = [1,2,3,4]

l1 = [11,22,33,44]

def fun(x):

return x*2

m1 = map(fun,l)

li1 = list(map(fun,l))

print(m1)

print(li1)

m2 = map(float,l)

li2 = list(map(float,l))

print(m2)

print(li2)

m3 = map(int,l)

li3 = list(map(int,l))

print(m3)

print(li3)

l4 = list(map(lambda x:x**2, l))

print(l4)

l5 = list(map(lambda x, y:x+y, l, l1))

print(l5)

3、numpy.linalg()函式

#numpy.linalg模組包含線性代數的函式。使用這個模組,可以計算逆矩陣、求特徵值、解線性方程組以及求解行列式等。

linalg.inv() 矩陣求逆

linalg.det() 矩陣求行列式(行列式的意義)

linalg.matrix_rank(matrix, tol) 利用svd的方法求解矩陣的秩(若值小於tol,認為是零)

linalg.eig() 計算特徵值與特徵向量

# from numpy import *

import numpy as np

#------------------------demo-------------

# 建立矩陣---

a = np.mat("1 1 2;1 2 3;4 5 6")

print('得到的矩陣:\n',a)

#計算逆矩陣---

a_inv = np.linalg.inv(a)#矩陣必須為方陣且可逆,否則會出現numpy.linalg.linalgerror: singular matrix錯誤

print('矩陣的逆:\n',a_inv)

#檢查原矩陣與逆矩陣相乘結果是否為單位矩陣

print('驗證矩陣逆\n',a*a_inv)

#求解線性方程組 a*x = b---

b = np.array([3,4,5])

x = np.linalg.solve(a,b)

print('方程a*x = b的解:\n',x)

#使用dot函式檢查求得的解是否正確

print('驗證解是否正確:\n',np.dot(a,x))

#特徵值和特徵向量---

# numpy.linalg模組中,ei**als函式可以計算矩陣的特徵值,而eig函式可以返回乙個包含特徵值和對應的特徵向量的元組

b = np.mat("3,4,5;6,7,8;9,1,2")

b_eig = np.linalg.ei**als(b)

print('矩陣的特徵解:\n',b_eig)

b1,b2 = np.linalg.eig(b)

print('矩陣的特徵值:\n',b1,'\n矩陣的特徵向量:\n',b2)

#使用dot函式驗證求得的解是否正確 b*x= lamda*x

for i in range(len(b1)):

print("left:",np.dot(b,b2[:,i]))#b*x

print("right:",b1[i]*b2[:,i])#lamda*x

#奇異值分解---

# numpy.linalg模組中的svd函式可以對矩陣進行奇異值分解。

# 該函式返回3個矩陣——u、sigma和v,其中u和v是正交矩陣,sigma包含輸入矩陣的奇異值。

u,sigma,v = np.linalg.svd(b,full_matrices=false)

print("奇異值分解u:\n",u)

print("奇異值分解sigma:\n",sigma)

print("奇異值分解v:\n",v)

# 使用diag函式生成完整的奇異值矩陣。將分解出的3個矩陣相乘

print ("驗證奇異值分解:\n",u * np.diag(sigma) * v)

#廣義逆矩陣---

# 使用numpy.linalg模組中的pinv函式進行求解,

# 注:inv函式只接受方陣作為輸入矩陣,而pinv函式則沒有這個限制

b1 = np.mat("3,4,5;6,7,8")

b1_pinv = np.linalg.pinv(b1)

print("計算廣義逆矩陣:\n",b1_pinv)

#將廣義逆矩陣與原矩陣相乘

print("計算原矩陣:\n",b1*b1_pinv)

#計算行列式 ;使用det函式計算行列式

print ("計算b矩陣行列式:\n",np.linalg.det(b))

4、

聚類演算法之高斯混合模型

高斯混合模型 gmm gaussian mixture model 統計學習的模型有兩種,一種是概率模型,一種是非概率模型。所謂概率模型,是指訓練模型的形式是p y x 輸入是x,輸出是y,訓練後模型得到的輸出不是乙個具體的值,而是一系列的概率值 對應於分類問題來說,就是輸入x對應於各個不同y 類 ...

高斯混合聚類

高斯混合聚類 將高斯分布 貝葉斯公式 極大似然法 em 估計 的思路混合在這一種方法中。高斯混合聚類是從概率的角度對樣本進行聚類的,而且這個概率是連續概率。先驗概率 指根據以往經驗和分析得到的概率。類條件概率 指已知乙個條件下,結果發生的概率。後驗概率 判斷結果的發生是由哪個原因引起的概率。一元高斯...

混合高斯模型聚類

翻譯自matlab幫助。混合高斯模型簡介 混合高斯模型基於多變數正 態分布。類gmdistribution通過使用em演算法來擬合資料,它基於各觀測量計算各成分密度的後驗概率。高斯混合模型常用於聚類,通過選擇成分最大化後驗概率來完成聚類。與k means聚類相似,高斯混合模型也使用迭代演算法計算,最...