PySpark-ml-分類-clustering

更多信息https://blue-shadow.top/

更多信息在Github上:https://github.com/Shadow-Hunter-X

無督導(dǎo)學(xué)習(xí)

前面介紹的幾種機(jī)器學(xué)習(xí)算法都是監(jiān)督機(jī)器的學(xué)習(xí),在已知目標(biāo)變量或標(biāo)簽的位置,我們試圖預(yù)測基于輸入特性的輸出儡嘶。
無監(jiān)督學(xué)習(xí)是不同的一種沒有標(biāo)記數(shù)據(jù)的感覺,我們不會試圖預(yù)測任何輸出因此,但試圖找到有趣的模式,并提出
數(shù)據(jù)中的組,類似的值被組合在一起。

主要的方法

  • 量化觀察對象,使用一個向量進(jìn)行表示,如可以用年齡兼蜈,身高献酗,體重表示一個人
年齡 薪水 體重 身高
30 15k 62 172
40 25k 75 170
  • 計(jì)算兩個對象間的距離,通過用歐幾里德法來測量距離,直截了當(dāng)
distance.png

=√((30-40)2 + (15-25)2 + (62-75)2 + (172-170)2)
=√(100+100+169+4)
=19.3

還要其他計(jì)算距離的算法: Manhattan 距離 德澈; Mahalanobis距離 ;Chebyshev 距離等。

計(jì)算得到上述兩個對象間的距離為19.3

K-Means算法

K代表數(shù)據(jù)集中劃分類別的個數(shù),現(xiàn)在對K-Menas算法中的一些概念的說明丛肮。

  • Centroid-圖心

圖心指的是中心的數(shù)據(jù)點(diǎn),在一個集群的中心或一個組。它也是集群中最具有代表性的點(diǎn),最大距離等距點(diǎn)到集群中的其他點(diǎn)魄缚。
每個集群或組包含不同數(shù)量的數(shù)據(jù)點(diǎn)到圖心的質(zhì)心最近

centroid.png

聚類的整個想法是最小化內(nèi)光距離,這是集群的圖心的數(shù)據(jù)點(diǎn)的內(nèi)部距離最大限度的相互聚系距離,即兩個之間的圖心之間不同分類

  • Variance-方差
    方差是圖心所在數(shù)據(jù)集中的數(shù)據(jù)點(diǎn)距離的總和宝与。
var.png

示例代碼

用的測試數(shù)據(jù)是 iris data(鳶尾科話)數(shù)據(jù),由于這份數(shù)據(jù)在統(tǒng)計(jì)計(jì)算測試中經(jīng)常用到冶匹,所以在網(wǎng)絡(luò)上搜索下习劫,就可以找到。

from pyspark.sql import SparkSession
import pyspark

from pyspark.sql.functions import * 
from pyspark.sql.types import *
from pyspark.sql.functions import rand, randn
from pyspark.ml.clustering import KMeans

spark = SparkSession.builder.appName('k_means').getOrCreate()  # 創(chuàng)建SparkSession對象

print("------------------讀取數(shù)據(jù)-----------------")

df=spark.read.csv('iris_dataset.csv',inferSchema=True,header=True)  # 讀取數(shù)據(jù)

print("------------------查看分析數(shù)據(jù)-----------------")

print((df.count(),len(df.columns)))         # 查看數(shù)據(jù)規(guī)模

# 查看列信息
df.printSchema()
df.columns            

df.orderBy(rand()).show(10,False)           # 查看數(shù)據(jù)嚼隘,隨機(jī)的方式

df.groupBy('species').count().orderBy('count',ascending=False).show(10,False) # 匯總查看數(shù)據(jù)

print("-----------------數(shù)據(jù)轉(zhuǎn)換-------------------")

from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler    # 導(dǎo)入VerctorAssembler 將多個列合并成向量列的特征轉(zhuǎn)換器,即將表中各列用一個類似list表示诽里,輸出預(yù)測列為單獨(dú)一列。


input_cols=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']

# 將所有的屬性轉(zhuǎn)換為轉(zhuǎn)化為一個vector
vec_assembler = VectorAssembler(inputCols = input_cols, outputCol='features')
final_data = vec_assembler.transform(df)

print("------------設(shè)定不同的K值飞蛹,進(jìn)行分類,計(jì)算平方誤差之和------------")

errors=[]

for k in range(2,10):
    kmeans = KMeans(featuresCol='features',k=k)
    model = kmeans.fit(final_data)
    intra_distance = model.computeCost(final_data)
    errors.append(intra_distance)
    print("With K={}".format(k))
    print("Within Set Sum of Squared Errors = " + str(errors))
    print('--'*30)

print("-----------使用mathplot計(jì)算谤狡,匯總不同K值-----------------")

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

cluster_number = range(2,10)
plt.scatter(cluster_number,errors)
plt.xlabel('Number of Clusters (K)')
plt.ylabel('SSE')
plt.show()

# 通過圖形,查看k=4時(shí)較為合適
kmeans = KMeans(featuresCol='features',k=4,)
model = kmeans.fit(final_data)

predictions=model.transform(final_data)

predictions.groupBy('species','prediction').count().show()      # 查看分類的數(shù)據(jù)

print("---------將數(shù)據(jù)轉(zhuǎn)換為panda結(jié)構(gòu)卧檐,并查看空間3d圖心-----------")

pandas_df = predictions.toPandas()
pandas_df.sample(5)

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

cluster_vis = plt.figure(figsize=(15,10)).gca(projection='3d')
cluster_vis.scatter(pandas_df.sepal_length, pandas_df.sepal_width, pandas_df.petal_length, c=pandas_df.prediction,depthshade=False)
plt.show()
Figure_1.png
Figure_2.png
part1.png
part2.png
part3.png

上一篇:PySpark-ml-推薦系統(tǒng)
下一篇:Oozie-關(guān)于Oozie

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墓懂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泄隔,更是在濱河造成了極大的恐慌拒贱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佛嬉,死亡現(xiàn)場離奇詭異逻澳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)暖呕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門斜做,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湾揽,你說我怎么就攤上這事瓤逼×鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵霸旗,是天一觀的道長贷帮。 經(jīng)常有香客問我,道長诱告,這世上最難降的妖魔是什么撵枢? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮精居,結(jié)果婚禮上锄禽,老公的妹妹穿的比我還像新娘。我一直安慰自己靴姿,他們只是感情好担败,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布奴拦。 她就那樣靜靜地躺著逼庞,像睡著了一般俱诸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辈毯,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天坝疼,我揣著相機(jī)與錄音搜贤,去河邊找鬼谆沃。 笑死,一個胖子當(dāng)著我的面吹牛仪芒,可吹牛的內(nèi)容都是我干的唁影。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼掂名,長吁一口氣:“原來是場噩夢啊……” “哼据沈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饺蔑,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤锌介,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猾警,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孔祸,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年发皿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崔慧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡穴墅,死狀恐怖惶室,靈堂內(nèi)的尸體忽然破棺而出温自,到底是詐尸還是另有隱情,我是刑警寧澤皇钞,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布悼泌,位于F島的核電站,受9級特大地震影響夹界,放射性物質(zhì)發(fā)生泄漏券躁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一掉盅、第九天 我趴在偏房一處隱蔽的房頂上張望也拜。 院中可真熱鬧,春花似錦趾痘、人聲如沸慢哈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵贱。三九已至,卻和暖如春侣集,著一層夾襖步出監(jiān)牢的瞬間键俱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工世分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留编振,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓臭埋,卻偏偏與公主長得像踪央,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓢阴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容