在训练过程中没有所谓的标准答案,故机器会自己从资料群中找出一套分群的法则。非监督式学习的优点是不需要事先以人力标签,只给定特徵让机器想办法会从中找出规律。常见的非监督式的分群演算法有 K-means,它根据物以类聚的原理目标是根据特徵把资料样本分为 K 群。其中在训练模型时仅须对机器提供输入的特徵,并利用分群演算法自动从这些特徵中找出邻近的集群中心作为该类别。
透过分群分类演算法我们能够将多种维度的资料进行分类。K-means 演算法的概念很简单也非常容易实作,仅一般加减乘除就好不需复杂的计算公式。
重复步骤2、3,直到资料点不再变换群组为止
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
我们今天要实作分群分类的问题,因此鸢尾花朵资料集非常适合当作范例。其资料集载入方式在第四天有提过,是一样的内容!
iris = load_iris()
df_data = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= ['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm','Species'])
df_data
K-means 演算法在 Sklearn 套件中已经帮我们封装好了,使用者只要呼叫 API 即可将分群分类演算法快速实作。
Parameters:
Attributes:
[n_clusters, n_features]
。Methods:
from sklearn.cluster import KMeans
kmeansModel = KMeans(n_clusters=3, random_state=46)
clusters_pred = kmeansModel.fit_predict(X)
使用者设定 K 个分群後,该演算法快速的找到 K 个中心点并完成分群分类。拟合好模型後我们可以计算各个样本到该群的中心点的距离之平方和,用来评估集群的成效,其 inertia
越大代表越差。
kmeansModel.inertia_
输出结果:
78.94084142614602
若要查看各群集的中心点,可以参考以下程序码。
kmeansModel.cluster_centers_
输出结果:
array([[5.9016129 , 2.7483871 , 4.39354839, 1.43387097],
[5.006 , 3.428 , 1.462 , 0.246 ],
[6.85 , 3.07368421, 5.74210526, 2.07105263]])
当你手边有一群资料,且无法一眼看出有多少个中心的状况。可用使用下面两种方法做 k-means 模型评估。
当K值越来越大,inertia 会随之越来越小。正常情况下不会取K最大的,一般是取 elbow point 附近作为 K,即 inertia 迅速下降转为平缓的那个点。
# k = 1~9 做9次kmeans, 并将每次结果的inertia收集在一个list里
kmeans_list = [KMeans(n_clusters=k, random_state=46).fit(X)
for k in range(1, 10)]
inertias = [model.inertia_ for model in kmeans_list]
另外一个方法是用 silhouette scores 去评估,其分数越大代表分群效果越好。
from sklearn.metrics import silhouette_score
silhouette_scores = [silhouette_score(X, model.labels_)
for model in kmeans_list[1:]]
本系列教学内容及范例程序都可以从我的 GitHub 取得!
>>: 【Day 04】 Data Analytics Pipeline 对应於 AWS 中的服务 ( 2 )
以物件做props的传递 我们先来看看一个例子! 在这里我们先用props把外层元件的data里的i...
小弟想询问 因为专题需制作一个透过硬体记步数的功能 如何将Arduino nano蒐集起来的资讯 转...
torchvision.transforms() Transforms are common im...
箭头函式 箭头函式功能与一般函式的用法大致差不多,不过写法却比一般函式还要简洁的多。 这里就直接来时...
到此为止,若一切顺利,表示NNI安装正确,功能一切正常。但整个流程究竟在做甚麽事情呢? 首先,我们在...