中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

什么是網(wǎng)絡(luò)營(yíng)銷包含哪些內(nèi)容全網(wǎng)營(yíng)銷與seo

什么是網(wǎng)絡(luò)營(yíng)銷包含哪些內(nèi)容,全網(wǎng)營(yíng)銷與seo,wordpress ldap,h5 小米網(wǎng)站模板K-means(k-均值,也記為kmeans)是聚類算法中的一種,由于其原理簡(jiǎn)單,可解釋強(qiáng),實(shí)現(xiàn)方便,收斂速度快,在數(shù)據(jù)挖掘、聚類分析、數(shù)據(jù)聚類、模式識(shí)別、金融風(fēng)控、數(shù)據(jù)科學(xué)、智能營(yíng)銷和數(shù)據(jù)運(yùn)…

K-means(k-均值,也記為kmeans)是聚類算法中的一種,由于其原理簡(jiǎn)單,可解釋強(qiáng),實(shí)現(xiàn)方便,收斂速度快,在數(shù)據(jù)挖掘、聚類分析、數(shù)據(jù)聚類、模式識(shí)別、金融風(fēng)控、數(shù)據(jù)科學(xué)、智能營(yíng)銷和數(shù)據(jù)運(yùn)營(yíng)等領(lǐng)域有著廣泛的應(yīng)用。

K-means 是我們最常用的基于歐式距離的聚類算法,其認(rèn)為兩個(gè)目標(biāo)的距離越近,相似度越大。

一、K-means基礎(chǔ)

1.1牧師-村民模型

K-means 有一個(gè)著名的解釋:牧師—村民模型:

有四個(gè)牧師去郊區(qū)布道,一開始牧師們隨意選了幾個(gè)布道點(diǎn),并且把這幾個(gè)布道點(diǎn)的情況公告給了郊區(qū)所有的村民,于是每個(gè)村民到離自己家最近的布道點(diǎn)去聽課。
聽課之后,大家覺得距離太遠(yuǎn)了,于是每個(gè)牧師統(tǒng)計(jì)了一下自己的課上所有的村民的地址,搬到了所有地址的中心地帶,并且在海報(bào)上更新了自己的布道點(diǎn)的位置。
牧師每一次移動(dòng)不可能離所有人都更近,有的人發(fā)現(xiàn)A牧師移動(dòng)以后自己還不如去B牧師處聽課更近,于是每個(gè)村民又去了離自己最近的布道點(diǎn)……
就這樣,牧師每個(gè)禮拜更新自己的位置,村民根據(jù)自己的情況選擇布道點(diǎn),最終穩(wěn)定了下來。

我們可以看到該牧師的目的是為了讓每個(gè)村民到其最近中心點(diǎn)的距離和最小。

1.2聚類

什么是聚類?

通俗說,聚類是將一堆數(shù)據(jù)劃分成到不同的組中。

聚類(Clustering)的通俗定義:將一堆數(shù)據(jù)劃分到不同的組中。一種無監(jiān)督學(xué)習(xí),其產(chǎn)生的類別是未知的。

聚類的學(xué)術(shù)定義:把一個(gè)數(shù)據(jù)對(duì)象的集合劃分成簇(子集),使簇內(nèi)對(duì)象彼此相似,簇間對(duì)象不相似的過程。

1.3聚類分類

在聚類算法中,常用的是 K-means 和 DBSCAN,但本文聚焦 K-means 。

HMM即隱馬爾可夫模型(HiddenMarkovModel)在語音識(shí)別、機(jī)器翻譯、中文分詞、命名實(shí)體識(shí)別、詞性標(biāo)注、基因識(shí)別等領(lǐng)域有廣泛的使用。

1.4基于劃分的聚類算法

學(xué)術(shù)性的定義:按照某種目標(biāo)將數(shù)據(jù)劃分成若干個(gè)組,劃分的結(jié)果是使目標(biāo)函數(shù)值最大化(或最小化)。

通俗性的定義:根據(jù)樣本特征的相似度或距離遠(yuǎn)近,將其劃分為若干個(gè)類。

1.4.1相似度

什么是相似度?即兩個(gè)對(duì)象的相似程度。

相似度的原理
原理代表
基于距離的度量距離小,相似度大歐氏距離
基于夾角的度量夾角小,相似度大余弦相似度

1.4.2距離

什么是距離?即兩點(diǎn)的距離。

二、K-means原理

K-means,其中K是指類的數(shù)量,means是指均值。

2.1K-means原理

K-means是基于樣本集合劃分的聚類算法,是一種無監(jiān)督學(xué)習(xí)。

K-means的思想:

  • 將樣本集合劃分為k個(gè)子集,構(gòu)成k個(gè)類;
  • 將n個(gè)樣本分到k個(gè)類中,每個(gè)樣本到其所屬類的中心距離最小。

K-means的假設(shè):一個(gè)樣本只屬于一個(gè)類,或者類的交集為空集。

K-means是怎么判斷類別的,又是怎么判斷相似的?

?

通過K-means算法原理,可知K-means的本質(zhì)是物以類聚。

2.2K-means算法

?K-means 的算法步驟為:

  1. 選擇初始化的 k 個(gè)樣本作為初始聚類中心?a = a_{1},a_{2},...a_{k}
  2. 針對(duì)數(shù)據(jù)集中每個(gè)樣本?x_{i}?計(jì)算它到 k 個(gè)聚類中心的距離并將其分到距離最小的聚類中心所對(duì)應(yīng)的類中;
  3. 針對(duì)每個(gè)類別a_{j},重新計(jì)算它的聚類中心 a_{j} = \frac{1}{|c_{j}|}\sum _{x\in c_{j}}x(即屬于該類的所有樣本的質(zhì)心);
  4. 重復(fù)上面 2 3 兩步操作,直到達(dá)到某個(gè)中止條件(迭代次數(shù)、最小誤差變化等)。

K-means聚類算法的主要步驟:

  • 第一步:初始化聚類中心:隨機(jī)選取k個(gè)樣本作為初始的聚類中心。(k需要提前確定)
  • 第二步:給聚類中心分配樣本:計(jì)算每個(gè)樣本與各個(gè)聚類中心之間的距離,把每個(gè)樣本分配給距離它最近的聚類中心(初始中心的選擇影響聚類結(jié)果)
  • 第三步:移動(dòng)聚類中心?:新的聚類中心移動(dòng)到這個(gè)聚類所有樣本的平均值處(可能存在空簇)
  • 第四步:停止移動(dòng):重復(fù)第2步,直到聚類中心不再移動(dòng)為止

注意:K-means算法采用的是迭代的方法,得到局部最優(yōu)解

2.2.1. K-means如何確定 K 值?

K-means 常常根據(jù) SSE 和輪廓系數(shù)確定 K 值。

方法一:嘗試不同k值:多選取幾個(gè)k值,對(duì)比聚類效果,選擇最優(yōu)的k值。

方法二:結(jié)合業(yè)務(wù)特點(diǎn):假定想要把文章分為兵乒球,籃球,綜合三個(gè)類型,就設(shè)定k=3。

方法三:根據(jù)SSE和輪廓系數(shù):SSE越小,聚類效果越好;輪廓系數(shù)越大,聚類效果越好。

2.2.2. K-means如何選取初始中心點(diǎn)?

K-means選擇不同的初始中心,會(huì)得到不同的聚類結(jié)果。

K-means 常使用 K-means++ 方法確定初始中心點(diǎn)。

K-means++:選擇初始的聚類中心之間的相互距離要盡可能的遠(yuǎn)

二分K-means:選擇誤差最大的類,進(jìn)行二分分裂。

2.2.3. K-means如何處理空簇?

聚類中心沒有被分配到樣本,常常將其刪除。

空簇問題:K-means中計(jì)劃聚成20類,結(jié)果才聚成19類,1類為空。

空簇原因:聚類中心沒有被分配到樣本。

解決辦法

  • 法一:其他簇心的均值點(diǎn)
  • 法二:刪除空族
  • 法三:最遠(yuǎn)離聚類中心的點(diǎn)

2.3. K- means特征工程

類別特征、大數(shù)值特征都不適用于 K-means 聚類。

原因:K-means是基于距離的,而類別沒有距離。

k-means對(duì)異常值明顯,比如年齡、金額等。

2.4. K- means評(píng)估

什么樣的 K-means 聚類才是好的 K-means 聚類?

實(shí)際應(yīng)用中,常常把 SSE(Sum of Squared Errors,誤差平方和) 與輪廓系數(shù)(Silhouette Coefficient)結(jié)合使用,評(píng)估聚類模型的效果。

SSE:誤差平方和(Sum of Squared Errors)最小,聚類效果最好。

輪廓系數(shù)(Silhouette Coefficient):輪廓系數(shù)越大,聚類效果越好。

2.4.1. SSE

SSE越小,聚類效果越好。

2.4.2. 輪廓系數(shù)

輪廓系數(shù)越大,聚類效果越好。

2.5復(fù)雜度

先看下偽代碼:

獲取數(shù)據(jù) n 個(gè) m 維的數(shù)據(jù)
隨機(jī)生成 K 個(gè) m 維的點(diǎn)
while(t)for(int i=0;i < n;i++)for(int j=0;j < k;j++)計(jì)算點(diǎn) i 到類 j 的距離for(int i=0;i < k;i++)1. 找出所有屬于自己這一類的所有數(shù)據(jù)點(diǎn)2. 把自己的坐標(biāo)修改為這些數(shù)據(jù)點(diǎn)的中心點(diǎn)坐標(biāo)
end

時(shí)間復(fù)雜度: O(tknm),其中,t 為迭代次數(shù),k 為簇的數(shù)目,n 為樣本點(diǎn)數(shù),m 為樣本點(diǎn)維度。

空間復(fù)雜度:O(m(n+k)) ,其中,k 為簇的數(shù)目,m 為樣本點(diǎn)維度,n 為樣本點(diǎn)數(shù)。

三、K-means應(yīng)用

3.1K-means的python實(shí)現(xiàn)

# -*- coding:utf-8 -*-
import numpy as np
from matplotlib import pyplotclass K_Means(object):# k是分組數(shù);tolerance‘中心點(diǎn)誤差’;max_iter是迭代次數(shù)def __init__(self, k=2, tolerance=0.0001, max_iter=300):self.k_ = kself.tolerance_ = toleranceself.max_iter_ = max_iterdef fit(self, data):self.centers_ = {}for i in range(self.k_):self.centers_[i] = data[i]for i in range(self.max_iter_):self.clf_ = {}for i in range(self.k_):self.clf_[i] = []# print("質(zhì)點(diǎn):",self.centers_)for feature in data:# distances = [np.linalg.norm(feature-self.centers[center]) for center in self.centers]distances = []for center in self.centers_:# 歐拉距離# np.sqrt(np.sum((features-self.centers_[center])**2))distances.append(np.linalg.norm(feature - self.centers_[center]))classification = distances.index(min(distances))self.clf_[classification].append(feature)# print("分組情況:",self.clf_)prev_centers = dict(self.centers_)for c in self.clf_:self.centers_[c] = np.average(self.clf_[c], axis=0)# '中心點(diǎn)'是否在誤差范圍optimized = Truefor center in self.centers_:org_centers = prev_centers[center]cur_centers = self.centers_[center]if np.sum((cur_centers - org_centers) / org_centers * 100.0) > self.tolerance_:optimized = Falseif optimized:breakdef predict(self, p_data):distances = [np.linalg.norm(p_data - self.centers_[center]) for center in self.centers_]index = distances.index(min(distances))return indexif __name__ == '__main__':x = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])k_means = K_Means(k=2)k_means.fit(x)print(k_means.centers_)for center in k_means.centers_:pyplot.scatter(k_means.centers_[center][0], k_means.centers_[center][1], marker='*', s=150)for cat in k_means.clf_:for point in k_means.clf_[cat]:pyplot.scatter(point[0], point[1], c=('r' if cat == 0 else 'b'))predict = [[2, 1], [6, 9]]for feature in predict:cat = k_means.predict(predict)pyplot.scatter(feature[0], feature[1], c=('r' if cat == 0 else 'b'), marker='x')pyplot.show()

?運(yùn)行結(jié)果如下:

{0: array([1.16666667, 1.46666667]), 1: array([7.33333333, 9.        ])}

?

備注:*是兩組數(shù)據(jù)的”中心點(diǎn)”;x是預(yù)測(cè)點(diǎn)分組。

3.2K-means的Sklearn實(shí)現(xiàn)

import numpy as np
from sklearn.cluster import KMeans
from matplotlib import pyplotif __name__ == '__main__':x = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])# 把上面數(shù)據(jù)點(diǎn)分為兩組(非監(jiān)督學(xué)習(xí))
clf = KMeans(n_clusters=2)
clf.fit(x)  # 分組centers = clf.cluster_centers_  # 兩組數(shù)據(jù)點(diǎn)的中心點(diǎn)
labels = clf.labels_  # 每個(gè)數(shù)據(jù)點(diǎn)所屬分組
print(centers)
print(labels)for i in range(len(labels)):pyplot.scatter(x[i][0], x[i][1], c=('r' if labels[i] == 0 else 'b'))
pyplot.scatter(centers[:, 0], centers[:, 1], marker='*', s=100)# 預(yù)測(cè)
predict = [[2, 1], [6, 9]]
label = clf.predict(predict)
for i in range(len(label)):pyplot.scatter(predict[i][0], predict[i][1], c=('r' if label[i] == 0 else 'b'), marker='x')pyplot.show()

運(yùn)行結(jié)果如下:

[[7.33333333 9.        ][1.16666667 1.46666667]]
[1 1 0 0 1 0]

備注:*是兩組數(shù)據(jù)的”中心點(diǎn)”;x是預(yù)測(cè)點(diǎn)分組。

?3.3. 用戶聚類分群

數(shù)據(jù)集:titanic.xls(泰坦尼克號(hào)遇難者與幸存者名單)

titanic.xls的數(shù)據(jù)集獲取地址:

titanic.xls

任務(wù):基于除survived字段外的數(shù)據(jù),使用k-means對(duì)用戶進(jìn)行分組(生/死)

聚類的用戶分群常用在早期,嘗試進(jìn)行用戶探索。實(shí)際落地常常結(jié)合用戶標(biāo)簽,或者用戶畫像進(jìn)行用戶分群。

用戶聚類分群的python代碼如下:

# -*- coding:utf-8 -*-
import numpy as np
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd# 加載數(shù)據(jù)
df = pd.read_excel('titanic.xls')
df.drop(['body', 'name', 'ticket'], 1, inplace=True)
df.fillna(0, inplace=True)  # 把NaN替換為0# 把字符串映射為數(shù)字,例如{female:1, male:0}
df_map = {}
cols = df.columns.values
for col in cols:if df[col].dtype != np.int64 and df[col].dtype != np.float64:temp = {}x = 0for ele in set(df[col].values.tolist()):if ele not in temp:temp[ele] = xx += 1df_map[df[col].name] = tempdf[col] = list(map(lambda val: temp[val], df[col]))# 將每一列特征標(biāo)準(zhǔn)化為標(biāo)準(zhǔn)正太分布
x = np.array(df.drop(['survived'], 1).astype(float))
x = preprocessing.scale(x)
clf = KMeans(n_clusters=2)
clf.fit(x)# 計(jì)算分組準(zhǔn)確率
y = np.array(df['survived'])
correct = 0
for i in range(len(x)):predict_data = np.array(x[i].astype(float))predict_data = predict_data.reshape(-1, len(predict_data))predict = clf.predict(predict_data)if predict[0] == y[i]:correct += 1print(correct * 1.0 / len(x))

執(zhí)行結(jié)果:

第一次執(zhí)行:0.6974789915966386
第二次執(zhí)行:0.3017570664629488

注意:結(jié)果出現(xiàn)很大波動(dòng),原因是它隨機(jī)分配組(生:0,死:1)(生:1,死:0)。

四、K-means總結(jié)

4.1K-means的優(yōu)缺點(diǎn)

4.1.1優(yōu)點(diǎn)

  • 容易理解,聚類效果不錯(cuò),雖然是局部最優(yōu), 但往往局部最優(yōu)就夠了;
  • 原理簡(jiǎn)單,實(shí)現(xiàn)方便,收斂速度快;
  • 處理大數(shù)據(jù)集的時(shí)候,該算法可以保證較好的伸縮性;
  • 當(dāng)簇近似高斯分布的時(shí)候,效果非常不錯(cuò);
  • 算法復(fù)雜度低;
  • 聚類效果較優(yōu);
  • 模型的可解釋性較強(qiáng);
  • 調(diào)參只需要調(diào)類數(shù)k 。

4.1.2?缺點(diǎn)

  • K 值需要人為設(shè)定,不同 K 值得到的結(jié)果不一樣,k的選取不好把握;
  • 對(duì)初始的簇中心敏感,不同選取方式會(huì)得到不同結(jié)果;
  • 對(duì)異常值敏感;
  • 樣本只能歸為一類,不適合多分類任務(wù);
  • 不適合太離散的分類、樣本類別不平衡的分類、非凸形狀的分類;
  • 如果數(shù)據(jù)的類型不平衡,則聚類效果不佳
  • 采用的是迭代的方法,得到局部最優(yōu)解
  • 對(duì)于噪音和異常點(diǎn)比較敏感

什么是凸集 (convex set)?

凸集 (convex set)

歐幾里得空間的一個(gè)子集,其中任意兩點(diǎn)之間的連線仍完全落在該子集內(nèi)。例如,下面的兩個(gè)圖形都是凸集:

所以,凸的數(shù)據(jù)集,即數(shù)據(jù)集的樣本呈現(xiàn)凸集分布。

相反,下面的兩個(gè)圖形都不是凸集:

?

所以,不是凸的數(shù)據(jù)集,即是數(shù)據(jù)集的樣本呈現(xiàn)的不是凸集分布。

4.2K-means的改進(jìn)

針對(duì)K-means缺點(diǎn),K-means有許多改進(jìn)算法,如數(shù)據(jù)預(yù)處理(去除異常點(diǎn)),合理選擇 K 值,高維映射等。

K-means改進(jìn)
缺點(diǎn)改進(jìn)
1、k的選取不好把握ISODATA
2、對(duì)初始聚類中心敏感k-means++
3、對(duì)于不是凸的數(shù)據(jù)集比較難以收斂DESCAN
4、如果數(shù)據(jù)的類型不平衡,則聚類效果不佳CUSBoost
5、采用的是迭代的方法,得到局部最優(yōu)解二分K-means
6、對(duì)于噪音和異常點(diǎn)比較敏感K-Mediods

【機(jī)器學(xué)習(xí)】K-means(非常詳細(xì)) - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/78798251

Kmeans++聚類算法原理與實(shí)現(xiàn) - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/152286357

4.3聚類和分類的區(qū)別

聚類和分類的區(qū)別是什么呢?

最大區(qū)別是:聚類是無監(jiān)督的;分類是有監(jiān)督學(xué)習(xí)。

其中機(jī)器學(xué)習(xí)的分類按輸出類別(標(biāo)簽)不同,可以分為二分類(Binary Classification)、多分類(Multi-Class Classification)、多標(biāo)簽分類(Multi-Label Classification)。

http://www.risenshineclean.com/news/48831.html

相關(guān)文章:

  • 清理網(wǎng)站數(shù)據(jù)庫(kù)源碼交易平臺(tái)
  • 南昌那個(gè)公司做網(wǎng)站好今日最新國(guó)際新聞?lì)^條
  • 金昌網(wǎng)站seo合肥seo推廣培訓(xùn)班
  • 蘇州專業(yè)做網(wǎng)站公司有哪些小說推廣關(guān)鍵詞怎么弄
  • 做網(wǎng)站需要的照片網(wǎng)站建設(shè)公司哪個(gè)好呀
  • 建站公司 萬維科技外鏈交換平臺(tái)
  • 網(wǎng)站設(shè)置密碼百度網(wǎng)站域名注冊(cè)
  • 給企業(yè)做宣傳網(wǎng)站的好處百度上如何發(fā)廣告
  • 開發(fā)平臺(tái)游戲名詞解釋搜索引擎優(yōu)化
  • 貴陽疫情最新消息今天寧波seo排名優(yōu)化培訓(xùn)
  • 網(wǎng)站建設(shè)公司信息搜索引擎營(yíng)銷的優(yōu)勢(shì)和劣勢(shì)
  • 織夢(mèng)的手機(jī)端網(wǎng)站模板技能培訓(xùn)有哪些科目
  • 破解版下載大全免費(fèi)下載seo優(yōu)化軟件有哪些
  • 湛江免費(fèi)建站哪里有淘寶聯(lián)盟怎么推廣
  • 鄭州網(wǎng)站開發(fā)設(shè)計(jì)公司電話個(gè)人如何優(yōu)化網(wǎng)站有哪些方法
  • 如何建立網(wǎng)站做微商企業(yè)網(wǎng)站模板 免費(fèi)
  • 多語種網(wǎng)站建設(shè)手機(jī)版怎么用百度快照
  • 馬鞍山住房和城鄉(xiāng)建設(shè)局網(wǎng)站免費(fèi)發(fā)帖論壇大全
  • 國(guó)內(nèi)ip地址代理免費(fèi)信息流優(yōu)化師簡(jiǎn)歷怎么寫
  • 建立網(wǎng)站站點(diǎn)的步驟技術(shù)培訓(xùn)平臺(tái)
  • 做電影網(wǎng)站服務(wù)器需求seo導(dǎo)航站
  • 給網(wǎng)站做接口企業(yè)培訓(xùn)考試系統(tǒng)
  • 廬江有做網(wǎng)站的嗎財(cái)經(jīng)新聞每日財(cái)經(jīng)報(bào)道
  • 連江網(wǎng)站建設(shè)服務(wù)index百度指數(shù)
  • 高德地圖有外資背景嗎優(yōu)化大師官方
  • 煙臺(tái)網(wǎng)站建設(shè).comseo自然搜索優(yōu)化排名
  • 網(wǎng)站域名過期怎么做重慶網(wǎng)站快速排名提升
  • 大上海小程序開發(fā)搜索引擎優(yōu)化的主題
  • 萬維網(wǎng)的網(wǎng)站抖音優(yōu)化排名
  • 南寧美麗南方官方網(wǎng)站建設(shè)意見企業(yè)網(wǎng)站建設(shè)的基本流程