資料探勘 INTVW

2021-09-07 00:08:26 字數 4781 閱讀 1498

1,極大似然估計的過程

先假定類別c的類條件概率p(x|c)具有某種確定的概率分布形式(如正態分佈),再基於對訓練樣本對概率分布的引數(如u, σ^2)進行估計。具體步驟:

寫出似然函式

取對數求偏導,令偏導為0

得出最大似然估計的引數值

2,kmeans理論基礎、理論依據

演算法屬性:

無監督的聚類演算法

演算法思想:

對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為k個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。

演算法過程:

選擇k個點作為初始質心  

repeat

將每個點指派到最近的質心,形成k個簇

重新計算每個簇的質心

until 簇不發生變化或達到最大迭代次數

演算法實現:

參考:

import numpy as np

# 載入資料

def loaddataset(filename):

data = np.loadtxt(filename,delimiter='\t')

return data

# 歐氏距離計算

def disteclud(x,y):

return np.sqrt(np.sum((x-y)**2)) # 計算歐氏距離

# 為給定資料集構建乙個包含k個隨機質心的集合

def randcent(dataset,k):

m,n = dataset.shape

centroids = np.zeros((k,n))

for i in range(k):

index = int(np.random.uniform(0,m)) #

centroids[i,:] = dataset[index,:]

return centroids

# k均值聚類

def kmeans(dataset,k):

m = np.shape(dataset)[0] #行的數目

# 第一列存樣本屬於哪一簇

# 第二列存樣本的到簇的中心點的誤差

clusterassment = np.mat(np.zeros((m,2)))

clusterchange = true

# 第1步 初始化centroids

centroids = randcent(dataset,k)

while clusterchange:

clusterchange = false

# 遍歷所有的樣本(行數)

for i in range(m):

mindist = 100000.0

minindex = -1

# 遍歷所有的質心

#第2步 找出最近的質心

for j in range(k):

# 計算該樣本到質心的歐式距離

distance = disteclud(centroids[j,:],dataset[i,:])

if distance < mindist:

mindist = distance

minindex = j

# 第 3 步:更新每一行樣本所屬的簇

if clusterassment[i,0] != minindex:

clusterchange = true

clusterassment[i,:] = minindex,mindist**2

#第 4 步:更新質心

for j in range(k):

pointsincluster = dataset[np.nonzero(clusterassment[:,0].a == j)[0]] # 獲取簇類所有的點

centroids[j,:] = np.mean(pointsincluster,axis=0) # 對矩陣的行求均值

return centroids,clusterassment

3,em演算法

演算法用途:

處理缺損資料,截尾資料,帶有雜訊等所謂的不完全資料。

演算法過程:

第一步(期望,e步):利用當前估計的引數值計算對數似然的期望值

​​​​​​​第二步(最大化,m步):尋找能使e步的似然期望最大化的引數值

​​​​​​​重複e步、m步,直至收斂到區域性最優解。

演算法實現:

​​​​​​​參考:

import  math

import  copy

import  numpy  as  np

import  matplotlib.pyplot  as  plt

isdebug = false

# 指定k個高斯分布引數,這裡指定k=2。注意2個高斯分布具有相同均方差sigma,分別為mu1,mu2。

def ini_data(sigma, mu1, mu2, k, n):

global x  # x產生的資料 ,k維向量

global mu  # 初始均值

global expectations

x = np.zeros((1, n))

mu = np.random.random(2)  # 隨機產生乙個初始均值。

expectations = np.zeros((n, k))  # k個高斯分布,100個二維向量組成的矩陣。

for i in range(0, n):

if np.random.random(1) > 0.5:

# 隨機從均值為mu1,mu2的分布中取樣。

x[0, i] = np.random.normal() * sigma + mu1

else:

x[0, i] = np.random.normal() * sigma + mu2

if isdebug:

print("***********")

print(u"初始觀測資料x:")

print(x)

# em演算法:步驟1,計算e[zij]

def e_step(sigma, k, n):

# 求期望。sigma協方差,k高斯混合模型數,n資料個數。

global expectations  # n個k維向量

global mu

global x

for i in range(0, n):

denom = 0

for j in range(0, k):

denom += math.exp((-1 / (2 * (float(sigma ** 2)))) * (float(x[0, i] - mu[j])) ** 2)

# denom  分母項  mu(j)第j個高斯分布的均值。

for j in range(0, k):

numer = math.exp((-1 / (2 * (float(sigma ** 2)))) * (float(x[0, i] - mu[j])) ** 2)  # 分子項

expectations[i, j] = numer / denom  # 期望,計算出每乙個高斯分布所佔的期望,即該高斯分布以多大比例形成這個樣本

# em演算法:步驟2,求最大化e[zij]的引數mu

def m_step(k, n):

# 最大化

global expectations  # 期望值

global x  # 資料

for j in range(0, k):

# 遍歷k個高斯混合模型資料

numer = 0  # 分子項

denom = 0  # 分母項

for i in range(0, n):

numer += expectations[i, j] * x[0, i]  # 每乙個高斯分布的期望*該樣本的值。

denom += expectations[i, j]  # 第j個高斯分布的總期望值作為分母

mu[j] = numer / denom  # 第j個高斯分布新的均值,

# 演算法迭代iter_num次,或達到精度epsilon停止迭代

def run(sigma, mu1, mu2, k, n, iter_num, epsilon):

ini_data(sigma, mu1, mu2, k, n)

print(x)

print(u"初始:", mu)  # 初始均值

for i in range(iter_num):

old_mu = copy.deepcopy(mu)  # 演算法之前的mu

e_step(sigma, k, n)

m_step(k, n)

print(i, mu)  # 經過em演算法之後的mu,

if sum(abs(mu - old_mu)) < epsilon:

break

if __name__ == '__main__':

run(6, 40, 20, 2, 100, 100, 0.001)

plt.hist(x[0, :], 50)

plt.show()

4,資料探勘十大演算法:

SPSS Modeler資料探勘 資料探勘概述

資料探勘 是一種通過數理模式來分析大量資料,以找出不同的客戶或市場劃分,分析出消費者喜好和行為的方法。可以描述為 是按企業既定業務目標,對大量的企業資料進行探索和分析,揭示隱藏的 未知的 或驗證已知的規律性,並進一步將其模型化的先進的有效的方法。資料探勘 data mining 在技術上的定義是從大...

資料探勘 資料

對關注的屬性,樣本與原始資料集有相同的性質,則用抽樣計算的結果與全集是一樣。1.1 抽樣的方法 1 簡單隨機抽樣 random sampling 放回 不放回 2 分層抽樣 stratified sampling 如果資料集不同型別的資料數量差異過大,則隨機抽樣會丟失數量少的樣本。可針對不同資料組,...

資料探勘 關聯規則挖掘

關聯規則 association rule 是資料中所蘊含的一類重要規律。關聯規則挖掘的目標是在資料專案中找出所有的併發關係 cooccurrence relationships 這種關係也稱為關聯 association 關聯規則挖掘的經典應用是購物籃 market basket 關聯規則挖掘並沒...