k-means通常被稱為勞埃德演算法,這在資料聚類中是最經典的,也是相對容易理解的模型。演算法執行的過程分為4個階段。
1.首先,隨機設k個特徵空間內的點作為初始的聚類中心。
2.然後,對於根據每個資料的特徵向量,從k個聚類中心中尋找距離最近的乙個,並且把該資料標記為這個聚類中心。
3.接著,在所有的資料都被標記過聚類中心之後,根據這些資料新分配的類簇,通過取分配給每個先前質心的所有樣本的平均值來建立新的質心重,新對k個聚類中心做計算。
4.最後,計算舊和新質心之間的差異,如果所有的資料點從屬的聚類中心與上一次的分配的類簇沒有變化,那麼迭代就可以停止,否則回到步驟2繼續迴圈。
k均值等於具有小的全對稱協方差矩陣的期望最大化演算法
sklearn.cluster.kmeans
class sklearn.cluster.kmeans(n_clusters=8, init=『k-means++』, n_init=10, max_iter=300, tol=0.0001, precompute_distances=『auto』, verbose=0, random_state=none, copy_x=true, n_jobs=1, algorithm=『auto』)
「」":param n_clusters:要形成的聚類數以及生成的質心數
:param init:初始化方法,預設為』k-means ++』,以智慧型方式選擇k-均值聚類的初始聚類中心,以加速收斂;random,從初始質心資料中隨機選擇k個觀察值(行
:param n_init:int,預設值:10使用不同質心種子執行k-means演算法的時間。最終結果將是n_init連續執行在慣性方面的最佳輸出。
:param n_jobs:int用於計算的作業數量。這可以通過平行計算每個執行的n_init。如果-1使用所有cpu。如果給出1,則不使用任何平行計算**,這對除錯很有用。對於-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。因此,對於n_jobs = -2,所有cpu都使用乙個。
:param random_state:隨機數種子,預設為全域性numpy隨機數生成器
「」"from sklearn.cluster import kmeans
import numpy as np
x = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
kmeans = kmeans(n_clusters=2, random_state=0)
方法fit(x,y=none)
使用x作為訓練資料擬合模型
kmeans.fit(x)
predict(x)
**新的資料所在的類別
kmeans.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)
屬性clustercenters
集群中心的點座標
kmeans.cluster_centers_
array([[ 1., 2.],
[ 4., 2.]])
labels_
每個點的類別
kmeans.labels_
k-means ++
學習整合學習方法以及交叉驗證情況下的模型整合
學會使用深度學習模型的整合學習
在機器學習中的整合學習可以在一定程度上提高**精度,常見的整合學習方法有stacking、bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。
由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。
下面假設構建了10折交叉驗證,訓練得到10個cnn模型。
img那麼在10個cnn模型可以使用如下方式進行整合:
對**的結果的概率值進行平均,然後解碼為具體字元;
對**的字元進行投票,得到最終字元。
5.3 深度學習中的整合學習
此外在深度學習中本身還有一些整合學習思路的做法,值得借鑑學習:
dropout可以作為訓練深度神經網路的一種技巧。在每個訓練批次中,通過隨機讓一部分的節點停止工作。同時在**的過程中讓所有的節點都其作用。
imgdropout經常出現在在先有的cnn網路中,可以有效的緩解模型過擬合的情況,也可以在**時增加模型的精度。
class svhn_model1(nn.module):
definit(self):
super(svhn_model1, self).init()
# cnn提取特徵模組
self.cnn = nn.sequential(
nn.conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2)),
nn.relu(),
nn.dropout(0.25),
nn.maxpool2d(2),
nn.conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2)),
nn.relu(),
nn.dropout(0.25),
nn.maxpool2d(2),)#
self.fc1 = nn.linear(3237, 11)
self.fc2 = nn.linear(3237, 11)
self.fc3 = nn.linear(3237, 11)
self.fc4 = nn.linear(3237, 11)
self.fc5 = nn.linear(3237, 11)
self.fc6 = nn.linear(3237, 11)
def forward(self, img):
feat = self.cnn(img)
feat = feat.view(feat.shape[0], -1)
c1 = self.fc1(feat)
c2 = self.fc2(feat)
c3 = self.fc3(feat)
c4 = self.fc4(feat)
c5 = self.fc5(feat)
c6 = self.fc6(feat)
return c1, c2, c3, c4, c5, c6
5.3.2 tta
測試集資料擴增(test time augmentation,簡稱tta)也是常用的整合學習技巧,資料擴增不僅可以在訓練時候用,而且可以同樣在**時候進行資料擴增,對同乙個樣本**三次,然後對三次結果進行平均。
1 2 3
img img img
def predict(test_loader, model, tta=10):
model.eval()
test_pred_tta = none
for _ in range(tta):
test_pred =
with torch.no_grad():
for i, (input, target) in enumerate(test_loader):
c0, c1, c2, c3, c4, c5 = model(data[0])
output = np.concatenate([c0.data.numpy(), c1.data.numpy(),
c2.data.numpy(), c3.data.numpy(),
c4.data.numpy(), c5.data.numpy()], axis=1)
test_pred = np.vstack(test_pred)
if test_pred_tta is none:
test_pred_tta = test_pred
else:
test_pred_tta += test_pred
return test_pred_tta 零基礎入門CV賽事 Task5 模型整合
本章講解的知識點包括 整合學習方法 深度學習中的整合學習和結果後處理思路。stacking先從初始資料集訓練出初級學習器 個體學習器 然後 生成 乙個新資料集用於訓練次級學習器 用於結合的學習器,也稱元學習器meta learner 新的資料集中,初級學習器的輸出被當作樣例輸入特徵。注 訓練階段,次...
零基礎入門CV賽事 Task5 模型整合
學習整合學習方法以及交叉驗證情況下的模型整合 學會使用深度學習模型的整合學習 目的是提高 精度 方法有 stacking bagging boosting等,例如在機器學習中,對10個cnn模型可以使用如下方式進行整合 對 的結果的概率值進行平均,然後解碼為具體字元 對 的字元進行投票,得到最終字元...
Datawhale 零基礎入門CV賽事
本章將會講解卷積神經網路 convolutional neural network,cnn 的常見層,並從頭搭建乙個字元識別模型。學習cnn基礎和原理 使用pytorch框架構建cnn模型,並完成訓練 卷積神經網路 簡稱cnn 是一類特殊的人工神經網路,是深度學習中重要的乙個分支。cnn在很多領域都...