目次
1. 問題の説明
中国男子サッカーチームの結果は、常にファンの心を動かしてきました。多くの人々は、中国チームはすでにアジアで三流または最低レベルにあると信じています.アジアの大会では、中国チームはかつて良い成績を収めましたが、近年は悲惨な敗北を喫しました.
そのためには、アジアのさまざまなチームの試合データを科学的に集計し、各国の男子サッカーのレベルと強さを納得のいく形で提示する必要があります。
教師なし学習を使用したクラスタリング。クラスタリングは、事前にいくつかのチームのレベルと強さを知る必要はありません. カテゴリの数を与えるだけでよく、アルゴリズムは類似性の原則に従ってすべてのサンプルをカテゴリに分割します.
より正確なクラスタリング結果を得るには、適切なサンプル機能を選択することが重要です。チームの強さとレベルを正しく反映するには、どのような指標を選択すればよいかという質問に答えます。各国のサッカーの発展度を比較するには、自国の国内リーグの結果を選ぶのではなく、国際公式大会での各チームの成績を考慮する必要があります。
(1) ワールドカップの場合、最終ラウンドに進出した場合は最終順位 (1~32)、最終ラウンドに進出しなかった場合は予選上位 10 位以内に進出した場合は 33 としてコード化されます。資格のあるグループが資格を持たない場合、43 としてコード化されます。
(2) アジアカップの場合、準決勝に進出した場合は最終順位 (1-4)、準々決勝に進出した場合は 5、トップ 16 に進出した場合は 9 とコード化する; 修飾子で修飾しない場合は、17 とコーディングします。
チームの結果一覧は以下の通りです。
2. 自己組織化フィーチャー マップ ネットワークは、アジア サッカーの水平クラスタリングの原理を実現します。
アルゴリズムのフローチャートは次のとおりです。
3. アルゴリズムの手順
3.1 サンプルの定義
クラスタリングには合計 16 か国が含まれ、各国のチームのパフォーマンスは 4 次元ベクトルで表されます。
%% 定义输入样本
N = 16;
strr = {
'中国','日本','韩国','伊朗','沙特','伊拉克','卡塔尔','阿联酋','乌兹别克','泰国',...
'越南','阿曼','巴林','朝鲜','印尼','澳大利亚'};
data = [43,43,9,9; % 中国
28,9,4,1; % 日本
17,15,3,3; % 韩国
25,33,5,5; % 伊朗
28,33,2,9; % 沙特
43,43,1,5; % 伊拉克
43,33,9,5; % 卡塔尔
43,33,9,9; % 阿联酋
33,33,5,4; % 乌兹别克
43,43,9,17; % 泰国
43,43,5,17; % 越南
43,43,9,17; % 阿曼
33,33,9,9; % 巴林
33,32,17,9; % 朝鲜
43,43,9,17; % 印尼
16,21,5,2]'; % 澳大利亚
3.2 ネットワークを作成する
MATLAB Neural Network Toolbox の関数 selforgmap を使用して、以下を作成します。
% 2*2 自组织映射网络
net = selforgmap([2,2]);
3.3 ネットワークトレーニング
関数 train を使用して、入力サンプルをトレーニングします。
data = mapminmax(data);
net = init(net);
net = train(net, data([1,2,3,4],:));
3.4 テスト
自己組織化ネットワークのテストは、トレーニング データがテスト データと同じである教師あり学習でのテストとは異なります。トレーニングに使用する行列をネットワークに入力すると、各サンプルの分類ラベルを取得できます。
%% 测试
y = net(data([1,2,3,4],:));
% 将向量表示的类别转为标量
result = vec2ind(y);
3.5 クラスタリング結果の表示
クラスタリングが完了すると、1 つのクラスに分類されたサンプルには同じ分類ラベルが付けられますが、異なるクラスの分類ラベルとして使用される番号はランダムです。正しい表示結果を得るために、各クラスタリングカテゴリの固有ベクトル値の合計をカウントし、値が小さいほどレベルが高いため、統計結果を使用して、同じカテゴリが優れているかどうかを判断できます。悪い:
%% 输出结果
% 将分类标签按实力排序
score = zeros(1,M);
for i=1:M
t = data(:, result==i);
score(i) = mean(t(:));
end
[~,ind] = sort(score);
result_ = zeros(1,N);
for i=1:M
result_(result == ind(i)) = i;
end
fprintf(' 足球队 实力水平\n');
for i = 1:N
fprintf(' %-8s 第 %d 流\n', strr{
i}, result_(i)) ;
end
4. 走行結果
プログラムの実行結果は次のとおりです。
ニューラル ネットワークのトレーニング プロセス:
分類カテゴリ:
5、完全なコード
完全なコードは次のとおりです。
% football.m
% 亚洲足球水平聚类
%% 清空工作空间
clear,clc
close all;
rng(now)
M=4;
%% 定义输入样本
N = 16;
strr = {
'中国','日本','韩国','伊朗','沙特','伊拉克','卡塔尔','阿联酋','乌兹别克','泰国',...
'越南','阿曼','巴林','朝鲜','印尼','澳大利亚'};
data = [43,43,9,9; % 中国
28,9,4,1; % 日本
17,15,3,3; % 韩国
25,33,5,5; % 伊朗
28,33,2,9; % 沙特
43,43,1,5; % 伊拉克
43,33,9,5; % 卡塔尔
43,33,9,9; % 阿联酋
33,33,5,4; % 乌兹别克
43,43,9,17; % 泰国
43,43,5,17; % 越南
43,43,9,17; % 阿曼
33,33,9,9; % 巴林
33,32,17,9; % 朝鲜
43,43,9,17; % 印尼
16,21,5,2]'; % 澳大利亚
%% 创建网络
% 2*2 自组织映射网络
net = selforgmap([2,2]);
%% 网络训练
data = mapminmax(data);
tic
net = init(net);
net = train(net, data([1,2,3,4],:));
toc
%% 测试
y = net(data([1,2,3,4],:));
% 将向量表示的类别转为标量
result = vec2ind(y);
%% 输出结果
% 将分类标签按实力排序
score = zeros(1,M);
for i=1:M
t = data(:, result==i);
score(i) = mean(t(:));
end
[~,ind] = sort(score);
result_ = zeros(1,N);
for i=1:M
result_(result == ind(i)) = i;
end
fprintf(' 足球队 实力水平\n');
for i = 1:N
fprintf(' %-8s 第 %d 流\n', strr{
i}, result_(i)) ;
end