このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
k - meansクラスタリング
はk - meansクラスタリングを実行してn行p列のデータ行列idx
= kmeans (X
,k
)X
の観測をk
クラスターに分割し,観測ごとにクラスターインデックスを含むn行1列のベクトル(idx
)を返します。X
の行は観測に対応し,列は変数に対応します。
既定の設定では,kmeans
はクラスター中心の初期化に二乗ユークリッド距離計量とk - means + +アルゴリズムを使用します。
k——クラスタリングを使用してデータをクラスター化し,クラスター領域をプロットします。
フィッシャーのアヤメのデータセットを読み込みます。花弁の長さと幅を予測子として使用します。
负载fisheririsX =量(:,3:4);图;情节(X (: 1) X (:, 2),“k *’,“MarkerSize”5);标题“费舍尔的虹膜数据”;包含“花瓣长度(厘米)”;ylabel“花瓣宽度(cm)”;
大きいクラスターは,分散がより低い領域とより高い領域に分割されているように見えます。つまり,大きなクラスターは,2つのクラスターがオーバーラップしている可能性があります。
データをクラスタリングします。k= 3クラスターを指定します。
rng (1);%的再现性[idx C] = kmeans (X, 3);
idx
は,X
に含まれている観測値に対応する,予測したクラスターのインデックスのベクトルです。C
は,最終的な重心位置が格納される3行2列の行列です。
kmeans
を使用して各重心からグリッド上の点までの距離を計算します。これを行うには,重心(C
)およびグリッド上の点をkmeans
へ渡し,そのアルゴリズムの1反復を実装します。
x1 = min (X(: 1)): 0.01:马克斯(X (: 1));x2 = min (X(:, 2)): 0.01:马克斯(X (:, 2));[x1G, x2G] = meshgrid (x1, x2);XGrid = [x1G (:), x2G (:));在plot上定义一个精细的网格idx2Region = kmeans (XGrid 3“麦克斯特”,1,“开始”C);
警告:在1次迭代中收敛失败。
%将网格中的每个节点分配到最近的质心
kmeans
は,アルゴリズムが収束しないことを示す警告を表示します。これは,反復が1回のみ実行されることから予想できます。
クラスターの領域をプロットします。
图;gscatter (XGrid (: 1) XGrid (:, 2), idx2Region,...[0, 0.75, 0.75, 0.75, 0, 0.75, 0.75, 0.75, 0],“. .”);持有在;情节(X (: 1) X (:, 2),“k *’,“MarkerSize”5);标题“费舍尔的虹膜数据”;包含“花瓣长度(厘米)”;ylabel“花瓣宽度(cm)”;传奇(“地区1”,《区域2》,区域3的,“数据”,“位置”,“东南”);持有从;
標本データを無作為に生成します。
rng默认的;%的再现性X = [randn(100 2) * 0.75 +(100 2)的;randn(100 2) * 0.5的(100 2)];图;情节(X (: 1) X (:, 2),“。”);标题随机生成的数据的;
データ内に2つのクラスターが存在するように見えます。
データを2つのクラスターに分割し,5つの初期値から最適な割り当てを選択します。最終出力を表示します。
选择= statset (“显示”,“最后一次”);[idx C] = kmeans (X, 2,“距离”,“cityblock”,...“复制”5,“选项”、选择);
重复1,3次迭代,总距离之和= 201.533。重复2,5次迭代,总距离之和= 201.533。重复3,3次迭代,总距离之和= 201.533。重复4,3次迭代,总距离之和= 201.533。重复5次,2次迭代,总距离之和= 201.533。距离的最佳总和= 201.533
既定では,k——+ +を使用して複製が個別に初期化されます。
クラスターとクラスター重心をプロットします。
图;情节(X (idx = = 1,1) X (idx = = 1、2),“r”。,“MarkerSize”, 12)在情节(X (idx = = 2, 1), X (idx = = 2, 2),“b”。,“MarkerSize”12)情节(C (: 1), C (:, 2),“kx”,...“MarkerSize”15岁的“线宽”3)传说(“集群1”,《集群2》,“重心”,...“位置”,“西北”)标题“集群分配和质心”持有从
idx
を轮廓
へ渡すことで,クラスターがどの程度適切に分離されたかを判断できます。
大きなデータセットのクラスタリングでは,特にオンライン更新(既定で設定されている)を使用すると時間がかかる場合があります。并行计算工具箱™のライセンスがある場合に並列計算のオプションを設定すると,kmeans
は各クラスタリングタスク(または複製)を並列的に実行します。さらに,复制
> 1である場合,並列計算により収束までの時間が短くなります。
混合ガウスモデルから大きなデータセットを無作為に生成します。
μ= bsxfun (@times(20、30),(1:20)');%高斯混合均值rn30 = randn(30、30);σ= rn30 ' * rn30;%对称正定协方差Mdl = gmdistribution(μ、σ);定义高斯混合分布rng (1);%的再现性X =随机(Mdl, 10000);
Mdl
は20個の成分をもつ30次元のgmdistribution
モデルです。X
は,Mdl
から生成されたデータが含まれている10000行30列の行列です。
並列計算のオプションを指定します。
流= RandStream (“mlfg6331_64”);%随机数流选择= statset (“UseParallel”,1,“UseSubstreams”,1,...“流”、流);
RandStream
の入力引数“mlfg6331_64”
は,乗法ラグフィボナッチ発生器アルゴリズムを使用するよう指定します。选项
は,推定を制御するためのオプションを指定するフィールドをもつ構造体配列です。
k——クラスタリングを使用してデータをクラスター化します。データにk= 20個のクラスターがあることを指定し,反復回数を増やします。通常,目的関数には局所的最小値が含まれます。10個の複製を指定して、より低い局所的最小値の検出に役立てます。
抽搐;启动秒表计时器(sumd idx, C, D) = kmeans (X, 20,“选项”选项,“麦克斯特”, 10000,...“显示”,“最后一次”,“复制”10);
使用“local”配置文件启动并行池(parpool)…连接到6个工人。复制5,72次迭代,总距离之和= 7.73161e+06。重复1,64次迭代,总距离之和= 7.72988e+06。重复3,68次,总距离之和= 7.72576e+06。重复4,84次,总距离之和= 7.72696e+06。重复6,82次迭代,总距离之和= 7.73006e+06。重复7,40次迭代,总距离之和= 7.73451e+06。重复2,194次迭代,总距离之和= 7.72953e+06。重复9,105次迭代,总距离之和= 7.72064e+06。 Replicate 10, 125 iterations, total sum of distances = 7.72816e+06. Replicate 8, 70 iterations, total sum of distances = 7.73188e+06. Best total sum of distances = 7.72064e+06
toc终止秒表计时器
运行时间为61.915955秒。
6つのワーカーが利用可能であることがコマンドウィンドウに示されます。ワーカーの数はシステムにより異なる場合があります。コマンドウィンドウは,各複製の反復回数および最終的な目的関数値を表示します。複製9は距離の総和が最小なので,その結果が出力引数に含まれます。
kmeans
は,k——クラスタリングを実行して,データをk個のクラスターに分割します。新しいデータセットをクラスター化するときに,kmeans
を使用して,既存のデータと新しいデータが含まれる新しいクラスターを作成できます。関数kmeans
はC / c++コード生成をサポートするので,学習データを受け入れてクラスター化の結果を返すコードを生成してから,コードをデバイスに展開できます。このワークフローでは学習データを渡さなければなりませんが,サイズが非常に大きい可能性があります。デバイスのメモリを節約するため,kmeans
とpdist2
をそれぞれ使用して,学習と予測を分離することができます。
kmeans
を使用してMATLAB®でクラスターを作成し,生成されたコードでpdist2
を使用して新しいデータを既存のクラスターに割り当てます。コード生成用に,クラスターの重心位置と新しいデータセットを受け入れて最も近いクラスターのインデックスを返すエントリポイント関数を定義します。次に,エントリポイント関数のコードを生成します。
C / c++コードの生成にはMATLAB®编码器™が必要です。
k——クラスタリングの実行
3つの分布を使用して,学習データセットを生成します。
rng (“默认”)%的再现性X = [randn(100 2) * 0.75 +(100 2)的;randn(100 2) * 0.5的(100 2);randn (100 2) * 0.75);
kmeans
を使用して,学習データを3つのクラスターに分割します。
[idx C] = kmeans (X, 3);
クラスターとクラスター重心をプロットします。
图gscatter (X (: 1), (:, 2), idx,“bgm”)举行在情节(C (: 1), C (:, 2),“kx”)传说(“集群1”,《集群2》,“集群3”,聚类质心的)
既存クラスターへの新しいデータの割り当て
検定データセットを生成します。
Xtest = [randn(10, 2) * 0.75 +的(10,2);randn(10, 2) * 0.5的(10,2);randn (10, 2) * 0.75);
既存のクラスターを使用して,検定データセットを分類します。pdist2
を使用して,各検定データ点から最も近い重心を求めます。
[~, idx_test] = pdist2 (C Xtest“欧几里得”,“最小”1);
gscatter
を使用して検定データをプロットします。idx_test
を使用して検定データにラベルを付けます。
gscatter (Xtest (: 1) Xtest (:, 2), idx_test,“bgm”,“哦”)传说(“集群1”,《集群2》,“集群3”,聚类质心的,...“数据分类为第一组”,“数据分类为第二组”,...“数据分类为第3组”)
コードの生成
新しいデータを既存のクラスターに割り当てるCコードを生成します。C/C++ コードの生成には MATLAB® Coder™ が必要であることに注意してください。
重心位置と新しいデータを受け入れてから,pdist2
を使用して最も近いクラスターを求める,findNearestCentroid
という名前のエントリポイント関数を定義します。
MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令% # codegen
(またはプラグマ)をエントリポイント関数のシグネチャの後に追加します。この命令を追加すると,コード生成時にエラーになる違反の診断と修正をMATLAB代码分析器が支援します。
类型findNearestCentroid%显示findNearestCentroid.m的内容
函数idx = findNearestCentroid(C,X) %#codegen [~,idx] = pdist2(C,X,'欧几里得','最小',1);找到最近的质心
メモ:このページの右上にあるボタンをクリックしてこの例をMATLAB®で開くと,MATLAB®で例のフォルダーが開きます。このフォルダーには,エントリポイント関数のファイルが含まれています。
codegen
(MATLAB编码器)を使用してコードを生成します。CおよびC++ は静的な型の言語なので、エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。findNearestCentroid
の入力のデータ型と配列サイズを指定するため,arg游戏
オプションを使用して,特定のデータ型および配列サイズをもつ一連の値を表すMATLAB式を渡します。詳細については,コード生成用の可変サイズ引数の指定を参照してください。
codegenfindNearestCentroidarg游戏{C, Xtest}
代码生成成功。
codegen
は,プラットフォームに依存する拡張子をもつ墨西哥人関数findNearestCentroid_mex
を生成します。
生成されたコードを検証します。
myIndx = findNearestCentroid (C, Xtest);myIndex_mex = findNearestCentroid_mex (C, Xtest);verifyMEX = isequal (idx_test myIndx myIndex_mex)
verifyMEX =逻辑1
isequal
は,すべての入力が等しいことを意味する逻辑1 (真正的
)を返します。この比較により,同じインデックスを関数pdist2
、関数findNearestCentroid
,および墨西哥人関数が返すことを確認します。
GPU编码器™を使用して,最適化されたCUDA®コードを生成することもできます。
cfg = coder.gpuConfig (墨西哥人的);codegen配置cfgfindNearestCentroidarg游戏{C, Xtest}
コード生成の詳細については,一般的なコード生成のワークフローを参照してください。GPU编码器の詳細については,GPU编码器入門(GPU编码器)とサポートされる関数(GPU编码器)を参照してください。
X
- - - - - -データデータ。数値行列として指定します。X
の行は観測値に対応し,列は変数に対応します。
X
が数値ベクトルの場合,kmeans
はこれを向きに関係なくn行1列のデータ行列として扱います。
X
の南
は欠損データとして扱われ,最低1つの南
を含むX
の任意の行を削除します。X
の行を削除することで標本サイズが減少します。関数kmeans
は,出力引数idx
の対応する値に対して南
を返します。
データ型:单
|双
k
- - - - - -クラスターの数データ内のクラスターの数。正の整数として指定します。
データ型:单
|双
オプションの名称,值
引数のコンマ区切りペアを指定します。的名字
は引数名で,价值
は対応する値です。的名字
は引用符で囲まなければなりません。Name1, Value1,…,的家
のように,複数の名前と値のペアの引数を,任意の順番で指定できます。
“距离”、“余弦”,“复制”,10日,“选项”,statset (UseParallel, 1)
は,コサイン距離,開始値の異なる10
の複製クラスターおよび並列計算の使用を指定します。
显示
- - - - - -表示する出力レベル“关闭”
(既定値) |“最后一次”
|“通路”
コマンドウィンドウで表示する出力レベル。“显示”
と次のいずれかのオプションから構成されるコンマ区切りのペアとして指定します。
“最后一次”
——最後の反復の結果の表示
“通路”
——反復の結果の表示
“关闭”
——表示しない
例:“显示”、“最后”
距离
- - - - - -距離計量“sqeuclidean”
(既定値) |“cityblock”
|的余弦
|“相关”
|“汉明”
最小化に使用するp
次元空間内の距離計量。“距离”
と“sqeuclidean”
、“cityblock”
、的余弦
、“相关”
または“汉明”
から構成されるコンマ区切りのペアとして指定します。
kmeans
は,サポートされている距離計量ごとに異なる方法で重心クラスターを計算します。次の表は,使用可能な距離計量をまとめたものです。式ではxは観測(つまりX
の行),cは重心(行ベクトル)です。
距離計量 | 説明 | 式 |
---|---|---|
“sqeuclidean” |
2乗ユークリッド距離(既定の設定)。各重心は,そのクラスターの点の平均です。 |
|
“cityblock” |
L1距離など,差の絶対値の総和。各重心は,そのクラスターの点の成分単位の中央値です。 |
|
的余弦 |
1から,ベクトルとして扱われる点の間の夾角の余弦を引いた値。各重心は,そのクラスターの点を単位ユークリッド長に正規化した後の平均です。 |
|
“相关” |
1から,値の系列として扱われる点の間の標本相関を引いた値。各重心は,そのクラスターの点を中心にシフトしてゼロ平均と単位標準偏差に正規化した後の,それらの点の成分単位の平均です。 |
ここで
|
“汉明” |
この尺度はバイナリデータのみに適しています。 これは異なるビットの比率です。各重心は,そのクラスターの点の成分単位の中央値です。 |
我はインジケーター関数です。 |
例:“距离”、“cityblock”
EmptyAction
- - - - - -クラスターがそのメンバーである観測値をすべて失う場合に実行するアクション。“单”
(既定値) |“错误”
|“下降”
麦克斯特
- - - - - -最大反復回数One hundred.
(既定値) |正の整数最大反復回数。“麦克斯特”
と正の整数で構成されるコンマ区切りのペアとして指定します。
例:麦克斯特,1000年
データ型:双
|单
OnlinePhase
- - - - - -オンライン更新フラグ“关闭”
(既定値) |“上”
オンライン更新フラグ。“OnlinePhase”
および“关闭”
または“上”
のいずれかで構成されるコンマ区切りのペアとして指定します。
OnlinePhase
が在
の場合,kmeans
はバッチ更新フェーズだけでなくオンライン更新フェーズも実行します。オンラインフェーズは,大規模なデータセットでは時間がかかる場合がありますが,距離基準の局所的最小値になる解が保証されます。つまり,任意の1点を他のクラスターに移動すると距離の総和が増大するデータ分割を検出します。
例:“OnlinePhase”,“上”
选项
- - - - - -近似基準を最小化する反復アルゴリズムの制御オプション[]
(既定値) |statset
によって返される構造体配列近似基準を最小化する反復アルゴリズムの制御オプション。statset
により返される“选项”
と構造体配列で構成されるコンマ区切りのペアとして指定します。構造体配列のサポートされているフィールドで,反復アルゴリズムを制御するオプションを指定します。
次の表は,サポートされているフィールドをまとめています。サポートされているフィールドでは Parallel Computing Toolbox™ が必要であることに注意してください。
フィールド | 説明 |
---|---|
“流” |
この場合は,並列プールと同じサイズの细胞配列を使用します。並列プールが開いていない場合, |
“UseParallel” |
|
“UseSubstreams” |
再生成可能な方法で並列計算する場合に真正的 に設定します。既定の設定は假 です。再現性のある計算を行うには,流 をサブストリームを許可する型,“mlfg6331_64” または“mrg32k3a” に設定します。 |
予測結果をより確実にするために,parpool
(并行计算工具箱)を使用し,並列プールを明示的に作成してからkmeans
を呼び出し“选项”,statset (UseParallel, 1)
を設定します。
例:“选项”,statset (UseParallel, 1)
データ型:结构体
复制
- - - - - -新規の初期クラスター重心位置を使用するクラスタリングの反復回数1
(既定値) |正の整数新規の初期クラスター重心位置を使用するクラスタリングの反復回数。“复制”
と整数で構成されるコンマ区切りのペアとして指定します。kmeans
は最低のsumd
をもつ解を返します。
三维配列を名前と値のペアの引数“开始”
の値として指定することで,“复制”
を暗黙的に設定できます。
例:“复制”,5
データ型:双
|单
开始
- - - - - -初期クラスター重心位置を選択する方法“+”
(既定値) |“集群”
|“样本”
|“统一”
|数値行列|数値配列初期クラスター重心位置(または“シード”)を選択する方法。“开始”
と“集群”
、“+”
、“样本”
、“统一”
,数値行列または数値配列から構成されるコンマ区切りのペアとして指定します。次の表は,シードの選択に使用可能なオプションをまとめています。
値 | 説明 |
---|---|
“集群” |
無作為な10%の副標本内の観測値の個数が |
“+” (既定の設定) |
クラスター中心の初期化にk - means + +アルゴリズムを実装してk シードを選択します。 |
“样本” |
k 観測値をX から無作為に選択します。 |
“统一” |
k 点を一様に無作為にX の範囲から選択します。ハミング距離には無効です。 |
数値行列 | k 行p列の行列の重心開始位置。开始 の行はシードに対応します。开始 の最初の次元からk が推測されるので,k に対して[] を渡すことができます。 |
数値配列 | k x p rの重心開始位置の配列。各ページの行はシードに対応します。3番目の次元がクラスタリングルーチンの複製を呼び出します。ページjには複製jのシードのセットが含まれています。3番目次元の大きさから複製(名前と値のペアの引数“复制” により指定される)の数が推測されます。 |
例:“开始”、“样本”
データ型:字符
|字符串
|双
|单
idx
——クラスターインデックスクラスターインデックス。数値列ベクトルとして返されます。idx
にはX
と同数の行があり,各行は対応する観測のクラスター割り当てを示します。
C
——クラスター重心位置クラスター重心位置。数値行列として返します。C
はk
行p列の行列です。ここで、行 j はクラスター j の重心です。
“k - meansクラスタリング”つまり,ロイドのアルゴリズム[2]は,データを分割する反復アルゴリズムであり,重心によって定義されたkクラスターのうち1つにn個の観測値をそれぞれ割り当てます。ここで,アルゴリズムを開始する前にkを選択します。
アルゴリズムは,以下のように実行されます。
k初期クラスター中心("重心")を選択します。たとえば,観測 k を (“开始”、“样本”
を使用して)無作為に選択するか,クラスター中心の初期化(既定の設定)にk - means + +アルゴリズムを使用します。
すべての観測について各重心までの,点とクラスター重心間の距離を計算します。
以下の2つの進め方があります(OnlinePhase
により指定)。
バッチの更新——各観測を最も重心の近いクラスターに割り当てる。
オンライン更新——再割り当てによりクラスター内合計,点とクラスター重心間の距離が減少する場合,観測を異なる重心に個別に割り当てる。
詳細は,アルゴリズムを参照してください。
各クラスター内の観測の平均を計算し,新規の重心位置kを取得します。
クラスター割り当ての変化がなくなるか,反復回数が最大になるまで,手順2から4を繰り返します。
“k——+ +アルゴリズム”は,経験則を使用してk - meansクラスタリングの重心シードを検出します。亚瑟およびVassilvitskii[1]によると,k - means + +はロイドのアルゴリズムの実行時間および最終的な解の質を改善します。
k - means + +アルゴリズムはクラスターの数をkと仮定して以下のようにシードを選択します。
観測を一様に無作為にデータセットXから選択します。選択された観測値は最初の重心であり,c1で示されます。
各観測からc1までの距離を計算します。cjと観測値mの間の距離を と表します。
次の重心c2を次の確率でXから無作為に選択します。
中心jを選択するには,以下を行います。
各観測から各重心までの距離を計算します。各観測を最も近い重心に割り当てます。
M = 1,…、nおよびp=1、...j - 1について,重心jを次の確率でXから無作為に選択します。
ここでCpは重心cpに最も近いすべての観測値の集合です。x米はCpに属します。
つまり,それ自体から,既に選択されたなかで最も近い中心までの距離に比例する確率で,次の中心を選択します。
k個の重心が選択されるまでステップ4を繰り返します。
亚瑟とVassilvitskii[1]は,複数のクラスター傾向のシミュレーション分析を使用して,k - means + +はロイドのアルゴリズムよりも,より低いクラスター内の点とクラスター重心間の距離の二乗和への収束を迅速に達成することを実証しました。
kmeans
は2つのフェーズの反復アルゴリズムを使用して,すべてのk
クラスターにわたって合計される点と重心間距離の総計を最小化します。
1番目のフェーズでは,“バッチ更新”を使用します。つまり,各反復で,最も近いクラスターの重心に点を再割り当てするという操作をすべて同時に行ってから,クラスターの重心を再計算します。このフェーズでは,局所的最小値となる解に収束されないこともあります。つまり1つの点を他のクラスターに移動するデータ分割がと距離の総和を増大させます。これは,規模の小さなデータセットでよく発生します。バッチフェーズは高速ですが,2番目のフェーズの開始点となる解だけが概算される可能性があります。
2番目のフェーズでは,“オンライン更新”を使用します。この更新では,点を個別に再割り当てし,再割り当てすることで距離の合計が減少する場合は,各再割り当ての後にクラスター重心を再計算します。このフェーズでの各反復は,すべての点を経過する1つの引き渡しで構成されます。このフェーズは局所的最小値に収束されます。ただし,距離の総和がより低い局所的最小値が他にある可能性もあります。一般に大域的最小値の検出は,開始点を網羅的に選択することで解決します。しかし,通常は無作為な開始点をもつ複製を複数使用すると,結果的に解は大域的最小値になります。
复制
= r > 1および开始
が+
(既定値)の場合,k - means + +アルゴリズムに従って,さまざまなシードの集合rが選択される可能性もあります。
选项
のUseParallel
オプションを有効にし,复制
> 1とした場合,各ワーカーはシードの選択とクラスター化を並列で行います。
亚瑟,大卫和塞吉·瓦西里维茨基。" K-means++:小心播种的好处"第18届ACM-SIAM离散算法年会论文集,2007,第1027-1035页。
[2] Lloyd, Stuart P. < PCM中的最小二乘量化>IEEE信息理论汇刊。1982年第28卷,129-137页。
多变量观测。John Wiley & Sons, Inc., 1984。
聚类分解与分析:理论,FORTRAN程序,实例。J.戈德施密特(J. Goldschmidt)翻译。纽约:霍尔斯特德出版社,1985年。
使用上の注意事項および制限事項:
以下の構文がサポートされます。
idx = kmeans (X, k)
[idx C] = kmeans (X, k)
[idx C sumd] = kmeans (X, k)
(___) = kmeans(___、名称、值)
サポートされる名前と値のペアの引数および違いは次のとおりです。
“显示”
——既定値は“通路”
です。
“麦克斯特”
“选项”
- - - - - -statset
によって作成される構造体配列の“TolFun”
フィールドのみをサポートします。“TolFun”
の既定値は1的军医
です。関数kmeans
は,点と重心の距離のクラスター内合計に対する終了許容誤差として“TolFun”
の値を使用します。たとえば,“选项”,statset (e-8 TolFun, 1)
を指定できます。
“复制”
“开始”
- - - - - -“+”
、“样本”
および数値配列のみをサポートします。
詳細は,メモリに収まらないデータの高配列を参照してください。
使用上の注意事項および制限事項:
开始
メソッドで無作為選択を使用する場合,クラスターの重心の初期位置がMATLAB®と一致しない可能性があります。
X
の行数が固定されている場合,南
が含まれている行はコード生成時にX
から削除されません。
C
内のクラスターの重心位置は,MATLABの場合と順序が異なる可能性があります。この場合,idx
内のクラスターのインデックスも同様に異なります。
显示
を指定する場合,その値は“关闭”
でなければなりません。
流
を指定する場合,値が空でなければならず,UseSubstreams
が假
でなければなりません。
UseParallel
オプションを真正的
に設定した場合,
复制
が1
である場合でも,一部の計算を並列実行できます。大規模なデータセットで复制
が1
の場合,UseParallel
オプションを真正的
に設定することを検討してください。
kmeans
はparfor
(MATLAB编码器)を使用して,サポートされる共有メモリマルチコアプラットフォームで並列実行されるループを作成します。並列実行されるループは,単一のスレッドで実行されるループより高速になる可能性があります。コンパイラが开放多处理(OpenMP)アプリケーションインターフェイスをサポートしない場合,またはOpenMPライブラリを無効にした場合,MATLAB编码器™はparfor
ループを为
ループとして扱います。サポートされるコンパイラについては、サポートされるコンパイラを参照してください。
生成されたコードを展開するデバイスのメモリを節約するため,kmeans
とpdist2
をそれぞれ使用して,学習と予測を分離することができます。kmeans
を使用してMATLABでクラスターを作成し,生成されたコードでpdist2
を使用して新しいデータを既存のクラスターに割り当てます。コード生成用に,クラスターの重心位置と新しいデータセットを受け入れて最も近いクラスターのインデックスを返すエントリポイント関数を定義します。次に,エントリポイント関数のコードを生成します。たとえば,既存クラスターへの新しいデータの割り当てとC / c++コードの生成を参照してください。
R2020a以降は,kmeans
は,生成されたスタンドアロンC / c++コードにおいて,倍精度のインデックスではなく,整数型(int32
)のインデックスを返します。そのため,関数は,単精度の入力を使用する場合,より厳密な単精度のサポートを可能にします。墨西哥人コード生成では,関数は依然としてMATLABの動作に一致する倍精度のインデックスを返します。
コード生成の詳細については,コード生成の紹介および一般的なコード生成のワークフローを参照してください。
並列実行するには,この関数を呼び出すときに名前と値の引数“选项”
を指定し,statset
を使用してオプション構造体の“UseParallel”
フィールドを真正的
に設定します。
たとえば,次のようにします。“选项”,statset (UseParallel,真的)
並列計算の詳細については,自動並列サポートを使用したMATLAB関数の実行(并行计算工具箱)を参照してください。
この関数は,GPU配列を完全にサポートします。詳細は,GPUでのMATLAB関数の実行(并行计算工具箱)を参照してください。
链接
|clusterdata
|轮廓
|parpool
(并行计算工具箱)|statset
|gmdistribution
|kmedoids
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してください。WebブラウザーはMATLABコマンドをサポートしていません。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。