fitsemiself
構文
説明
fitsemiself
は、ラベル付けされたデータ、ラベル、およびラベル付けされていないデータが与えられた、半教師あり自己学習モデルを作成します。返されるモデルには、ラベル付けされていないデータに当てはめられたラベル、および対応するスコアが含まれます。このモデルは、オブジェクト関数 predict
を使用して未観測データのラベルを予測することもできます。ラベル付けアルゴリズムの詳細については、アルゴリズムを参照してください。
は Mdl
= fitsemiself(Tbl
,ResponseVarName
,UnlabeledTbl
)Tbl
内のラベル付けされたデータを使用します。ここで、Tbl.ResponseVarName
はラベル付けされたデータのラベルを格納しており、UnlabeledTbl
内のラベル付けされていないデータに当てはめられたラベルを返します。この関数は、オブジェクト Mdl
の FittedLabels
プロパティおよび LabelScores
プロパティに、当てはめられたラベルおよび対応するスコアをそれぞれ保存します。
は、Mdl
= fitsemiself(Tbl
,formula
,UnlabeledTbl
)formula
を使用して、Tbl
に含まれる変数で使用する応答変数 (ラベルのベクトル) と予測子変数を指定します。この関数は、これらの変数を使用して、UnlabeledTbl
内のデータにラベルを付けます。
は、Mdl
= fitsemiself(Tbl
,Y
,UnlabeledTbl
)Tbl
内の予測子データと Y
内のラベルを使用して、UnlabeledTbl
内のデータにラベルを付けます。
は、Mdl
= fitsemiself(X
,Y
,UnlabeledX
)X
内の予測子データと Y
内のラベルを使用して、UnlabeledX
内のデータにラベルを付けます。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、ラベル付けアルゴリズムで使用する学習器のタイプ、反復回数、およびスコアのしきい値を指定できます。Mdl
= fitsemiself(___,Name,Value
)
例
ラベル付けされていないデータへのラベルの当てはめ
半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。
ラベル付けされたデータの観測値をランダムに 60 個生成し、その観測値が 20 個ずつ 3 つのクラスに属するようにします。
rng('default') % For reproducibility labeledX = [randn(20,2)*0.25 + ones(20,2); randn(20,2)*0.25 - ones(20,2); randn(20,2)*0.5]; Y = [ones(20,1); ones(20,1)*2; ones(20,1)*3];
散布図を使用して、ラベル付けされたデータを可視化します。同じクラスに属する観測値は同じ色で示します。データは 3 つのクラスターに分割されていますが、わずかにオーバーラップしていることに注意してください。
scatter(labeledX(:,1),labeledX(:,2),[],Y,'filled') title('Labeled Data')
ラベル付けされていないデータの観測値を追加でランダムに 300 個生成し、各クラスに 100 個ずつ属するようにします。検証のため、ラベル付けされていないデータの真のラベルを追跡します。
unlabeledX = [randn(100,2)*0.25 + ones(100,2); randn(100,2)*0.25 - ones(100,2); randn(100,2)*0.5]; trueLabels = [ones(100,1); ones(100,1)*2; ones(100,1)*3];
半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。関数 fitsemiself
は SemiSupervisedSelfTrainingModel
オブジェクトを返します。このオブジェクトの FittedLabels
プロパティにはラベル付けされていないデータに当てはめられたラベルが、LabelScores
プロパティには関連するラベル スコアが含まれます。
Mdl = fitsemiself(labeledX,Y,unlabeledX)
Mdl = SemiSupervisedSelfTrainingModel with properties: FittedLabels: [300x1 double] LabelScores: [300x3 double] ClassNames: [1 2 3] ResponseName: 'Y' CategoricalPredictors: [] Learner: [1x1 classreg.learning.classif.CompactClassificationECOC]
散布図を使用して、当てはめられたラベルの結果を可視化します。当てはめられたラベルを使用して観測値の色を設定し、最大のラベル スコアを使用して観測値の透明度を設定します。透明度が低い観測値には、高い信頼度のラベルを付けます。クラスターの境界付近に位置している観測値には、低い信頼度のラベルが付いていることに注意してください。
maxLabelScores = max(Mdl.LabelScores,[],2); rescaledScores = rescale(maxLabelScores,0.05,0.95); scatter(unlabeledX(:,1),unlabeledX(:,2),[],Mdl.FittedLabels,'filled', ... 'MarkerFaceAlpha','flat','AlphaData',rescaledScores); title('Fitted Labels for Unlabeled Data')
ラベル付けされていないデータの真のラベルを使用して、ラベル付けの精度を判断します。
numWrongLabels = sum(trueLabels ~= Mdl.FittedLabels)
numWrongLabels = 7
unlabeledX
内の 300 個の観測値のうち、誤ったラベルが付けられた観測値はわずか 8 個です。
ラベルの当てはめに使用する学習器の指定
半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。ラベルの当てはめに使用する学習器のタイプを指定します。
carsmall
データ セットを読み込みます。変数 Acceleration
、Displacement
などからテーブルを作成します。各観測値、つまり table の行では、Cylinders
値をその観測値のラベルとして扱います。
load carsmall
Tbl = table(Acceleration,Displacement,Horsepower,Weight,Cylinders);
観測値の 20% にのみラベルが付けられているものとします。このシナリオを再作成するために、ラベル付けされた観測値を 20 個無作為に抽出し、それをテーブル unlabeledTbl
に保存します。残りの観測値からラベルを削除し、それをテーブル unlabeledTbl
に保存します。例の終わりでラベルの当てはめの精度を確認するため、ラベル付けされていないデータの真のラベルを変数 trueLabels
に保持します。
rng('default') % For reproducibility of the sampling [labeledTbl,Idx] = datasample(Tbl,20,'Replace',false); unlabeledTbl = Tbl; unlabeledTbl(Idx,:) = []; trueLabels = unlabeledTbl.Cylinders; unlabeledTbl.Cylinders = [];
半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。マルチクラス SVM (ECOC) モデルを使用して、ラベル付けされていない観測値に反復的にラベルを付けます。数値予測子を標準化し、SVM バイナリ学習器で線形カーネル関数を使用するという指定を行います。関数 fitsemiself
が返すオブジェクトの FittedLabels
プロパティには、ラベル付けされていないデータに当てはめられたラベルが含まれます。
Mdl = fitsemiself(labeledTbl,'Cylinders',unlabeledTbl, ... 'Learner',templateECOC('Learner',templateSVM('Standardize',true, ... 'KernelFunction','linear'))); fittedLabels = Mdl.FittedLabels;
保存したラベル付けされていないデータの真のラベルを、半教師あり自己学習法で返された当てはめ済みラベルと比較し、誤ってラベルが付けられた観測値を特定します。
wrongIdx = (trueLabels ~= fittedLabels); wrongTbl = unlabeledTbl(wrongIdx,:);
ラベル付けされていないデータに当てはめられたラベルの結果を可視化します。誤ってラベルが付けられた観測値は、プロット内で円で囲まれます。
gscatter(unlabeledTbl.Displacement,unlabeledTbl.Weight, ... fittedLabels) hold on plot(wrongTbl.Displacement,wrongTbl.Weight, ... 'ko','MarkerSize',8) xlabel('Displacement') ylabel('Weight') legend('4 cylinders','6 cylinders','8 cylinders') title('Fitted Labels for Unlabeled Data') hold off
入力引数
Tbl
— ラベル付けされた標本データ
テーブル
ラベル付けされた標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子に対応します。オプションで、Tbl
に応答変数 (ラベルのベクトル) 用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数はサポートされません。
Tbl
に応答変数が含まれている場合に Tbl
内の他の変数をすべて予測子として使用するには、ResponseVarName
を使用して応答変数を指定します。
Tbl
に応答変数が含まれている場合に Tbl
内の他の変数の一部のみを予測子として使用するには、formula
を使用して式を指定します。
Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数の長さと Tbl
の行数は等しくなければなりません。
データ型: table
UnlabeledTbl
— ラベル付けされていない標本データ
テーブル
ラベル付けされていない標本データ。テーブルとして指定します。UnlabeledTbl
の各行は 1 つの観測値に、各列は 1 つの予測子に対応します。UnlabeledTbl
には、Tbl
に含まれるものと同じ予測子が含まれなければなりません。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。この応答変数には、Tbl
内の標本データのクラス ラベルが含まれます。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、'Y'
として指定します。それ以外の場合、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y
が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値のペアの引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | string スカラー
応答変数および予測子変数サブセットの説明モデル。'Y~X1+X2+X3'
という形式の文字ベクトルまたは string スカラーを指定します。この式では、Y
は応答変数を、X1
、X2
および X3
は予測子変数を表します。
予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
Y
— クラス ラベル
数値ベクトル | categorical ベクトル | logical ベクトル | 文字配列 | string 配列 | 文字ベクトルの cell 配列
クラス ラベル。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。
Y
が文字配列である場合、クラス ラベルの各要素は配列の 1 つの行に対応しなければなりません。名前と値のペアの引数
ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: single
| double
| categorical
| logical
| char
| string
| cell
X
— ラベル付けされた予測子データ
数値行列
ラベル付けされた予測子データ。数値行列として指定します。
既定の設定では、X
の各行は 1 つの観測値に、各列は 1 つの予測子に対応します。
Y
の長さと X
の観測値数は同じでなければなりません。
予測子の名前を X
に表示される順序で指定するには、PredictorNames
名前と値のペアの引数を使用します。
データ型: single
| double
UnlabeledX
— ラベル付けされていない予測子データ
数値行列
ラベル付けされていない予測子データ。数値行列として指定します。既定の設定では、UnlabeledX
の各行は 1 つの観測値に、各列は 1 つの予測子に対応します。UnlabeledX
は、X
と同じ予測子を同じ順序で格納していなければなりません。
データ型: single
| double
メモ
NaN
、空の文字ベクトル (''
)、空の string (""
)、<missing>
および <undefined>
要素は欠損データとして扱われます。ソフトウェアが欠損値のある観測値を削除するかどうかは、基となる分類器のタイプ (Learner
) によって決まります。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: fitsemiself(Tbl,'Y',UnlabeledTbl,'Learner',templateSVM('Standardize',true),'IterationLimit',2e3)
は、バイナリ サポート ベクター マシン (SVM) 学習器を使用すること、数値予測子を標準化すること、および反復の最大実行回数を 2000 回とすることを指定します。
Learner
— 基となる分類器のタイプ
'svm'
| 'discriminant'
| 'kernel'
| 'knn'
| 'linear'
| 'naivebayes'
| 'tree'
| ...
基となる分類器のタイプ。'Learner'
と次の表のいずれかの値で構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
'discriminant' または templateDiscriminant オブジェクト | 判別分析分類器 |
templateECOC オブジェクト | マルチクラス誤り訂正出力符号 (ECOC) モデル — templateECOC('Learners',templateSVM('KernelFunction','gaussian')) は、マルチクラス分類用の既定の設定です。 |
templateEnsemble オブジェクト | アンサンブル分類モデル |
'kernel' または templateKernel オブジェクト | カーネル分類モデル (バイナリ分類の場合のみ) |
'knn' または templateKNN オブジェクト | k 最近傍モデル |
'linear' または templateLinear オブジェクト | 線形分類モデル (バイナリ分類の場合のみ) |
'svm' または templateSVM オブジェクト | サポート ベクター マシン (SVM) 分類器 (バイナリ分類の場合のみ) — templateSVM('KernelFunction','gaussian') はバイナリ分類の既定の設定です。 |
'tree' または templateTree オブジェクト | バイナリ決定分類木 |
例: 'Learner','tree'
例: 'Learner',templateEnsemble('AdaBoostM1',100,'tree')
IterationLimit
— 自己学習の最大反復回数
1e3
(既定値) | 正の整数スカラー
自己学習の最大反復回数。'IterationLimit'
と正の整数スカラーで構成されるコンマ区切りのペアとして指定します。この上限に到達した場合、アルゴリズムが収束しなくても、関数 fitsemiself
は、当てはめられたラベルとスコアが含まれる Mdl
を返します。
例: 'IterationLimit',2e3
データ型: single
| double
ScoreThreshold
— 当てはめられたラベルのスコアのしきい値
数値スカラー
当てはめられたラベルのスコアのしきい値。'ScoreThreshold'
と数値スカラーで構成されるコンマ区切りのペアとして指定します。アルゴリズムの各反復において、ソフトウェアは、指定した Learner
を使用して、ラベル付けされていない観測値についてラベルの予測を行い、その予測のスコアを計算します。ラベル付けされていない観測値のうち、予測スコアがスコアのしきい値以上であるものは、次の反復でラベル付けされた観測値として扱われます。ここで、ラベルは予測されたラベルです。既定では、ScoreThreshold
はバイナリ分類の場合は 0.1
、マルチクラス分類の場合は –0.1
です。
例: 'ScoreThreshold',0.2
データ型: single
| double
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | 'all'
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データがテーブル内にある場合、fitsemiself
は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列のいずれか、あるいは文字ベクトルの cell 配列である場合に、変数を categorical であると見なします。ただし、決定木を使用する学習器は、数学的に順序付けされた categorical ベクトルを連続変数と仮定します。予測子データが行列である場合、fitsemiself
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値のペアの引数 'CategoricalPredictors'
を使用してそれらを指定します。
異なる近似関数、および異なる学習器がカテゴリカル予測子を扱う方法の詳細については、ダミー変数の自動作成を参照してください。
例: 'CategoricalPredictors','all'
データ型: single
| double
| logical
| char
| string
| cell
ClassNames
— ラベル付けに使用するクラスの名前
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
ラベル付けに使用するクラスの名前。'ClassNames'
と、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列で構成されるコンマ区切りのペアとして指定します。ClassNames
のデータ型は Y
と同じでなければなりません。
ClassNames
が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
'ClassNames'
の使用目的は次のとおりです。
クラスの順序を指定する。
クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、
Mdl.LabelScores
に含まれる分類スコアの列の順序を指定するために'ClassNames'
を使用します。ラベル付けにクラスのサブセットを選択する。たとえば、
Y
に含まれているすべての異なるクラス名の集合が{'a','b','c'}
であるとします。クラス'a'
および'c'
のみの観測値を使用して基となる分類器Learner
を学習させるには、'ClassNames',{'a','c'}
を指定します。
ClassNames
の既定値は、Y
に含まれているすべての異なるクラス名の集合です。
例: 'ClassNames',{'b','g'}
データ型: categorical
| char
| string
| logical
| single
| double
| cell
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。'PredictorNames'
と一意な名前の string 配列または一意な文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。'PredictorNames'
の機能は、予測子データの提供方法によって決まります。
X
、Y
、およびUnlabeledX
を指定した場合、'PredictorNames'
を使用してX
およびUnlabeledX
内の予測子変数に名前を割り当てることができます。PredictorNames
内の名前の順序は、X
の列の順序に一致しなければなりません。X
が既定の方向 (行に観測値、列に予測子) をもつと仮定すると、PredictorNames{1}
はX(:,1)
の名前、PredictorNames{2}
はX(:,2)
の名前 (以下同様) になります。また、size(X,2)
とnumel(PredictorNames)
は等しくなければなりません。既定では
PredictorNames
は{'x1','x2',...}
です。
Tbl
およびUnlabeledTbl
を指定する場合、'PredictorNames'
を使用して、使用する予測子変数を選択できます。つまり、fitsemiself
はPredictorNames
の予測子変数と応答変数のみを使用して、ラベル付けされていないデータにラベルを付けます。PredictorNames
はTbl.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。'PredictorNames'
とformula
の両方ではなく、いずれか一方を使用して予測子を指定することをお勧めします。
例: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}
データ型: string
| cell
ResponseName
— 応答変数名
'Y'
(既定値) | 文字ベクトル | string スカラー
応答変数名。'ResponseName'
と文字ベクトルまたは string スカラーから構成されるコンマ区切りのペアとして指定します。
Y
を指定した場合、'ResponseName'
を使用して応答変数の名前を指定できます。ResponseVarName
またはformula
を指定した場合、'ResponseName'
を使用することはできません。
例: 'ResponseName','response'
データ型: char
| string
NumBins
— 数値予測子のビンの個数
[]
(既定値) | 正の整数スカラー
数値予測子のビンの数。'NumBins'
と正の整数スカラーで構成されるコンマ区切りのペアとして指定します。
'NumBins'
の値が空 (既定) である場合、どの予測子もビン化されません。'NumBins'
の値として正の整数スカラーを指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。'NumBins'
の値が一意な予測子の値の個数 (u) を超える場合、fitsemiself
は u 個のビンに予測子をビン化します。fitsemiself
は、カテゴリカル予測子をビン化しません。
大規模なデータ セットを使用する場合、このビン化オプションを使用すると分類器の学習を高速化できますが、精度が低下する可能性があります。はじめに
'NumBins',50
を試してから、精度と学習速度に応じて'NumBins'
の値を変更できます。
メモ
この引数は、Learner
値が、木学習器を使用する templateECOC
オブジェクトまたは templateEnsemble
オブジェクトである場合にのみ有効です。
例: 'NumBins',50
データ型: single
| double
ObservationsIn
— 予測子データ X
および UnlabeledX
の観測値の次元
'rows'
(既定値) | 'columns'
予測子データ X
および UnlabeledX
についての観測値の次元。'ObservationsIn'
と 'rows'
または 'columns'
で構成されるコンマ区切りのペアとして指定します。線形分類モデルの場合、観測値が列に対応するように X
と UnlabeledX
を配置して 'ObservationsIn','columns'
を指定すると、実行時間が短縮される可能性があります。
メモ
'columns'
値が有効になるのは、Learner
値がバイナリ線形分類モデル ('linear'
または templateLinear
)、または線形バイナリ学習器をもつ ECOC モデル (たとえば、templateECOC('Learners','linear')
) である場合のみです。
例: 'ObservationsIn','columns'
データ型: char
| string
出力引数
Mdl
— 半教師あり自己学習分類器
SemiSupervisedSelfTrainingModel
オブジェクト
半教師あり自己学習分類器。SemiSupervisedSelfTrainingModel
オブジェクトとして返されます。ドット表記を使用してオブジェクト プロパティにアクセスします。たとえば、ラベル付けされていないデータに当てはめられたラベルとそれに対応するスコアを取得するには、Mdl.FittedLabels
と Mdl.LabelScores
をそれぞれ入力します。
アルゴリズム
アルゴリズムでは、ラベル付けされたデータのみで最初に学習させたユーザー指定の分類器 (Learner
) に学習させることによって始まります。その後、その分類器を使用して、ラベル付けされていないデータのラベルを予測します。次に、アルゴリズムは予測のスコアを提供し、スコアがしきい値 (ScoreThreshold
) を超えている場合、その予測を分類器の次の学習サイクルの真のラベルとして扱います。ラベル予測が収束するか、反復制限 (IterationLimit
) に到達するまで、このプロセスは繰り返されます。
参照
[1] Abney, Steven. “Understanding the Yarowsky Algorithm.” Computational Linguistics 30, no. 3 (September 2004): 365–95. https://doi.org/10.1162/0891201041850876.
[2] Yarowsky, David. “Unsupervised Word Sense Disambiguation Rivaling Supervised Methods.” Proceedings of the 33rd Annual Meeting of the Association for Computational Linguistics, 189–96. Cambridge, Massachusetts: Association for Computational Linguistics, 1995. https://doi.org/10.3115/981658.981684.
バージョン履歴
R2020b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)