Python 機械学習 (2) 特徴量エンジニアリング、K 最近傍アルゴリズム、KNN ワークフロー、K 最近傍アルゴリズムの scikit-learn 実装、K 値の選択、距離計算、KD ツリー

特徴エンジニアリング

特徴を機械が容易に認識できるデータに変換し、特徴 a を機械が容易に読み取り、定量化できる言語に変換する

正規化された最小値と最大値

元のデータを[0,1] の間の
X ′ = x − minmax − min X'= \frac{x-min}{max-min}にマッピングします。バツ=×バツ
ただし、値に誤差があると全体の値に影響を及ぼし、正規化ではこの外れ値を解決できないなど、正規化にはデメリットもあります。したがって、正規化は、従来の正確な小規模データのシナリオにのみ適しています。

標準化

元のデータを変換して、データを平均 0、標準偏差 1 に変換します。つまり、データは正規分布に従います。
X ' = x − 平均 σ X'=\frac{x-mean}{\sigma}バツ=pバツ_

K 最近隣アルゴリズム (K 最近隣アルゴリズム)

意味

サンプルの特徴空間内の k 個の最も類似したサンプル (つまり、特徴空間内の最近傍サンプル) のほとんどが特定のカテゴリに属する​​場合、サンプルもこのカテゴリに属します。

アイディア

最近隣取りの本質は、朱に近い人は赤、墨に近い人は黒ということで、例えば、その地域に食べ物を届けてくれるのは誰なのか、周囲の住民を通して予測することができます。したがって、ユークリッド距離を使用して近傍までの距離を計算し、最も近い近傍 (k=1) を見つける必要があります。
問題: 1 つしかない場合、データの精度が十分ではなく、ノイズの干渉が強すぎ、データに誤りがあると完全に偏ってしまいます。
解決策: k 個の近傍を見つけるには、knn を実装する独自のコードを作成します。knn アルゴリズムは、動的に読み込まれるフォントのアンチクライミングにも使用できます。

K最近傍を理解する

『ウルフ・ウォリアー』、『オペレーション・レッド・シー』、『ミッション:インポッシブル6』はアクション映画、『プリセサー3』、『春暁と志明』、『タイタニック』はロマンス映画として知られています。各行(映画)はデータサンプルであり、その特徴が喧嘩の回数とキスの回数として列挙されており、喧嘩の回数とキスの回数によって恋愛映画とアクション映画が区別されます。「人魚」のような新しい映画がある場合、人間は自分の経験に基づいて映画を分類でき、機械は新しい映画を自動的に分類するための分類ルールを習得することもできます。
ここに画像の説明を挿入
図内のデータを整理し、次のように散布図を描きます。
ここに画像の説明を挿入

解析結果から、アクション映画には戦闘シーンが多いことが分かり、映画「マーメイド」のデータによれば、画像内の赤丸の位置がおおよそ判断できるそうです。次に、赤丸がどのサンプル点に近いかを判断する必要があり、「春暁と志明」に近ければ恋愛映画、「紅海作戦」に近ければアクション映画に分類できます。
2 点間の直線が最も近くなります。
ここに画像の説明を挿入
機械学習における 2 点間の距離というと、通常はユークリッド距離を指します。2 次元ユークリッド距離の式は次のとおりです: d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2
}d12=( ×1バツ2)2+( y1y2)2
2 つだけあるとは言えません。それぞれの特徴は 1 つの次元を表します。同様の理由で、3 次元の距離の式は次のとおりです: d 12 = (x 1 − x 2) 2 + (y 1 − y 2) 2 + (z 1 − z 2) 2 d_ {12} = \ sqrt {(x_1-x_2)^2 + (y_1-y2) ^2+(z_1-z_2) )^2
}d12=( ×1バツ2)2+( y1y2)2+( z1z2)2
4 次元以上の場合、N 次元のユークリッド距離公式は次のように要約されます。
d 12 = ∑ k = 1 n ( xi − yi ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2}d12=k = 1( ×私はy私は)2
距離を正確に計算し、解決する例として 2 つの点 (マーメイド、ミッション: インポッシブル 6) を取り上げます。

# 美人鱼:5  29
# 碟中谍6: 105 31
np.sqrt((105-5)**2+(31-29)**2)  # 100.0199980003999

ここに画像の説明を挿入
最短距離を計算したい場合は、「人魚」と各特徴点との距離を計算する必要があります。計算結果から、「マーメイド」に最も近い映画は「先代3」であることがわかりますが、1つの特徴点だけで判断すると不正確な結果となる可能性があります。このとき、比較のために近くの固有値をより多く (K 値) 選択する必要があります。K=3 の場合、最も近い 3 つの固有値を選択し、選択された固有値は「Predecessor 3」、「Chunjiao and Zhiming」、および「Titanic」になります。K=4 を選択すると、恋愛映画が 3 つ、アクション映画が 1 つになりますが、このときモードを選択し、最も出現頻度の高い特徴にデータを分類します。
1 つの特徴点の距離だけでタイプを判断することは信頼できません。下の図に示すように、シャオミンは実際には
ここに画像の説明を挿入
二七地区にいますが、学生 B との距離が最も近いです。これは分類問題です。K 最近傍アルゴリズムでは、半径を使用して円を描きますが、シャオミンが中原地区にあるとは言えず、分類問題は平均と見なすことはできません。計算する生徒を 5 人選択し、各生徒までの距離を個別に計算する場合は、xiaoming が位置するエリアをより確実に特定できるように、多数の数を持つカテゴリを選択する必要があります。Xiaoming は生徒 C と D に最も近く、生徒 E と F は遠いため、Xiaoming がどのエリアにいるかを正確に判断できます。

KNN ワークフロー

  • 分類対象の物体と他の物体との間の距離を計算します。
  • 最近傍の K 個を数えます。
  • K 個の最近傍について、それらがどのカテゴリに最も多く属しているか、分類されるオブジェクトはどのカテゴリに属しているか。
    プロセスに基づいて、numpy と pandas を使用してアルゴリズムを実装します。
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    プログラミングで実現するには、関数間の繰り返しの受け入れや呼び出しを避け、動的なパラメータの受け渡しや継承などを実現できるオブジェクト指向プログラミングの考え方が必要であり、インスタンス属性はすべてのインスタンスメソッドで利用可能です。まずクラスをカプセル化し、次に main() メソッドを定義し、インスタンスを作成してメイン プログラム メソッドでメソッドを呼び出します。
    main() メソッドでデータを読み取った後、すべてのデータを処理のために渡すことはできませんが、データは初期化されたフィーチャ、トレーニング フィーチャ: 戦いの数、キスの数、トレーニング ターゲット: 映画の種類、予測データ、インスタンス化クラス、入力トレーニング フィーチャ、ターゲット データ、および K 値に分割する必要があります。
    取得したデータをクラスに渡すには、クラス内に初期化メソッドを作成してプロパティを初期化します。
    映画「マーメイド」がどのカテゴリに属する​​かを予測する予測メソッドを作成し、予測データと実際のデータの間のユークリッド距離を計算し、距離が最小の上位 K 値を取得し、K 点の分類に関する統計を実行します。このときの統計量は、k をある値とした場合の結果なので、複数の値をテストしたい場合は、ループトラバーサルを行うことができ、k は奇数を取るのがベストです。

まとめ

  1. ユークリッド距離を計算する
  2. 最近傍の k 個を取得します
  3. numpy と pandas のブロードキャスト メカニズムを使用する方が、Python のループより効率的です
  4. データを選択します。
      1. df.loc[行ラベル、列ラベル]、ラベルによるデータの選択
    • 2.df.iloc[行テーブル、列添字]、添字/インデックスによるデータの選択
  5. 1 つの近傍は信頼できないため、複数の近傍を選択する必要があり、平均ではなくカテゴリが計算されます。

K 最近傍アルゴリズム API の概要

scikit-learn ツールの概要

scikit-learn は、Python 言語に基づいた機械学習ツールです。参考ドキュメント: http://scikitlearn.com.cn

  • Python 言語は、シンプルで効率的なデータ マイニングおよびデータ分析ツールです
  • Scikit-learn には、多くのよく知られた機械学習アルゴリズムの実装が含まれています
  • Scikit-learn には完全なドキュメントがあり、使いやすく、豊富な API が備わっています。

scikit-learnのインストール

pip3 install scikit-learn

注: scikit-learn をインストールするには、事前に numpy、Scipy、およびその他のライブラリをインストールする必要があります

scikit-learn は K 最近傍アルゴリズムを実装します – 分類問題

sklearn パッケージの下の近隣モジュールから、使用される KNeighborsClassifier 分類子を呼び出します。n_neighbors は指定された K 値です。

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto')
n_neighbors:查询默认使用的邻居数(默认为 5
weights:默认为 “uniform” 表示为每个近邻分配同一权重;
可指定为 “distance” 表示分配权重与查询点的距离成反比;同时还可以自定义权重。

ここに画像の説明を挿入

タイトルから、1-、-2 は同じカテゴリ (カテゴリ 0) に属し、2、3 は同じカテゴリ (カテゴリ 1) に属していることがわかります。入力 1 フィーチャは 2 つの近傍を選択します。1 に最も近い 2 が見つかるだけでなく、1 に最も近い -1 も見つかります。このとき、-1 と 2 は同じ重みを持ちます。既存のフィーチャ データと結果に従ってモデルをトレーニングし、weights=' distance' を使用して距離に応じて重みを増やします。

動画分類の実装例

ここに画像の説明を挿入

scikit-learn は K 最近傍アルゴリズムを実装します – 概要

  • フィーチャデータとターゲットデータを構築する
  • k 個の最近傍を使用して分類器を構築します (2 つのパラメーター: n_neighbors、weights)
  • トレーニングにフィットを使用する
  • 予測データ

K値の選択

K 値が比較的小さい場合は、未分類のオブジェクトが近隣オブジェクトに非常に近いことを意味します。このようにして生じる問題は、隣接点がノイズ点である場合、未分類のオブジェクトの分類でもエラーが発生し、KNN 分類で過学習が発生することです。入力データを通じてカテゴリを予測するには、結果を生み出すために入力データがトレーニング例に近い必要があります。例が 1 つだけ取られる (k の値が小さすぎる) 場合、それは毎日 1 つの質問タイプだけを練習するようなものです。試験中に複雑な質問タイプに遭遇すると、途方に暮れてしまいます。トレーニングしたテンプレートしか覚えていません。質問タイプを過剰にトレーニングすると、過剰適合が発生します。
K 値が比較的大きい場合は、遠すぎる点も未知のオブジェクトの分類に影響を与えることを意味します。この状況の利点は強力なロバスト性ですが、欠点も明らかです。サンプル バランスの影響を受け、アンダーフィッティングが発生します。つまり、未分類のオブジェクトは実際には分類されません。k 値が大きすぎるため、リスクに抵抗する能力が比較的強くなります。たとえば、試験の準備をするときに、あらゆる種類の問題 (すべてが含まれます) を読むことができ、入力された映画には類似した問題が表示されます。試験の知識ポイントは中学校からであり、試験対策の際には小学校、中学校、高校、大学の内容を復習しました。
N K 値を使用して小さいものから大きいものまでテストし、最良の結果が得られる K 値を選択します。1 つずつ人為的にテストするのは面倒ですが、交差検証を使用できます。相互検証の考え方は、サンプル セット内のサンプルの大部分をトレーニング セットとして使用し、サンプルの残りのごく一部を予測に使用して、分類モデルの精度を検証することです。したがって、KNN アルゴリズムでは、一般に、より狭い範囲から K 値を選択し、同時に検証セット上で最も精度の高いものが最終的に K 値として決定されます。

距離計算

  • ユークリッド距離 (ユークリッド距離)
  • マンハッタンの距離
  • ミンコフスキー距離
  • チェビシェフ距離
  • コサイン距離

ユークリッド距離

ユークリッド距離は 2 点間の距離の導出を表します。たとえば、教室 408 の生徒は隣の教室 508 に通っています。距離に従って直接通過することはできません。二次元ユークリッド距離の公式は次のとおりです:
}d12=( ×1バツ2)2+( y1y2)2
導出された 3 次元ユークリッド距離の式は次のとおりです。
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}d12=( ×1バツ2)2+( y1y2)2+( z1z2)2
帰納的な N 次元ユークリッド距離の公式は次のとおりです。
d 12 = ∑ k = 1 n ( xi − yi ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2}d12=k = 1( ×私はy私は)2

  • 根数に関しては、浮動小数点数、さらには無限ループの小数も関係します。機械学習の特徴は一般に自由度が高く(3 次元を超える)、小数が関与するとエラーが発生し、メモリ消費量が多くなり、コンピュータの動作が非常に遅くなります。この問題を解決するには、整数計算を実行し、マンハッタン距離を導入してみます。

マンハッタンの距離

幾何学的空間でよく使われます。たとえば、生徒 a は 408 番、生徒 b は 512 番です。a から b までは、真ん中の格子が壁です。a から緑の線をとって壁を通過することは不可能です。最終的な目標は、距離を最短にすることです。点 a から上に行くことができます。距離はy 2 y_2です。y2y 1 y_1y1その差、水平に歩くと距離は×2×_2バツ2そしてx 1 x_1バツ1最終目的地に到達するまでの差。2 つの距離を合計して、2 点間の距離を求めます。
下の図からわかるように、グリッドに沿ってどのように歩いても、2 点間の距離は一定です。
ここに画像の説明を挿入

2次元平面2点a ( x 1 , y 1 ) a(x_1,y_1)( × _1y1) b ( x 2 , y 2 ) b(x_2,y_2) b ( ×2y2)マンハッタン間の距離:
d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12}=| x_1-x_2 | +\mid y_1-y_2 \midd12=x1バツ2+y1y2
n 次元空間点a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})( × _11バツ12... バツ1n _) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b ( ×21バツ22... バツ2n _)マンハッタン距離:
d 12 = ∑ k = 1 n ( x 1 k − x 2 k ) d_{12} = {\sum_{k=1}^n(x_{1k}-x_{2k})}d12=k = 1( ×1k _バツ2k _)

  • マンハッタン距離はタクシー ジオメトリとも呼ばれ、市内での運転は壁を通過できず、家の周囲のルートのみをたどることができます。高次元の整数計算では加算と減算の演算のみが使用され、小数の計算が回避され (無限に繰り返される小数や無理数が存在しないように)、計算速度は比較的速く、誤差は非常に小さくなります。

チェビシェフ距離

チェスでは、キングは直線、水平、斜めに進むことができるため、キングは 1 歩で隣接する 8 つのマスのいずれかに移動できます。格子からのキング( x 1 , y 1 ) (x_1,y_1)( ×1y1)をグリッド( x 2 , y 2 ) (x_2,y_2)( ×2y2)必要な最小ステップ数はどれくらいですか? この距離はチェビシェフ距離と呼ばれます。
ここに画像の説明を挿入
上の図から、2A から 5C までの距離がわかります。2A から 2C (2 ステップ)、次に 2C から 5C (3 ステップ)、または 2A から 4C (2 ステップ)、その後 4C から 5C (1 ステップ) のいずれかになります。2 番目の種類で実行されるステップ数は、最初の種類で実行されるステップ数の 2 つの部分の最大値にすぎません。
2次元平面2点a ( x 1 , x 2 ) a(x_1,x_2)( × _1バツ2) b ( x 2 , y 2 ) b(x_2,y_2) b ( ×2y2)チェビシェフ距離間:
d 12 = max ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) d_{12}=max(| x_1-x_2 | ,\mid y_1-y_2 \mid)d12=最大x ( x1バツ2y1y2)
n 次元空間点a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})( × _11バツ12... バツ1n _) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b ( ×21バツ22... バツ2n _)チェビシェフ距離:
d 12 = max ( ∣ x 1 i − x 2 i ∣ ) d_{12}=max(| x_{1i}-x_{2i} | )d12=最大x ( x1バツ2)

ミンコフスキー距離

分式距離とは、都市間の距離の一種であり、複数の距離測定式を総合的に表現したものです。ミンコフスキー距離は、パラメーターを変更して限界形式、つまり
2 つの n 次元変数a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n}) を置き換えることにより、通過インデックスになります。( × _11バツ12... バツ1n _) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b ( ×21バツ22... バツ2n _)のミンコフスキー距離は次のように定義されます:
d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ pp d_{12} = \sqrt[p]{\sum_{k=1}^n|x_{1k}-x_{2k}|^p}d12=pk = 1x1k _バツ2k _p
ここで、p は可変パラメータです。

  • p = 1の場合p=1p=1の場合、ルート記号は存在しません。これはマンハッタン距離です。
  • p = 2の場合p=2p=2はユークリッド距離です。
  • p → ∞ p\to \infty p、限界の最大値を取得し、チェビシェフ距離である最小値を無視します。

コサイン距離

コサイン距離は実際には 2 つのベクトル間の角度を計算し、その方向の差を計算します。絶対値には影響を受けません。sin関数は斜辺と反対側の辺の比、cos関数は斜辺と隣接する辺の比であり、2つのベクトルのなす角度の余弦公式が導出されます。夾角の余弦の範囲は -1 から 1 であり、余弦が大きいほどベクトルの夾角は小さくなります。
2 次元空間のベクトル A ( x 1 , y 1 ) A(x_1,y_1)( ×1y1)とベクトルB ( x 2 , y 2 ) B(x_2,y_2)B ( ×2y2)のコサイン公式:
cosθ = x 1 x 2 + y 1 y 2 x 1 2 + y 1 2 x 2 2 + y 2 2 cosθ=\frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}cosθ _=バツ12+y12 バツ22+y22 バツ1バツ2+y1y2
2 つの n 次元サンプル点a ( x 11 , x 12 , ... , x 1 n ) a(x_{11},x_{12},...,x_{1n})( × _11バツ12... バツ1n _) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b ( ×21バツ22... バツ2n _)は次のとおりです:
cosθ = a ⋅ b ∣ a ∣ ∣ b ∣ cosθ=\frac{a \cdot b}{|a||b|}cosθ _=a ∣∣ b あるb
つまり: cos ( θ ) = ∑ k = 1 nx 1 kx 2 k ∑ k = 1 nx 1 k 2 ∑ k = 1 nx 2 k 2 cos(θ)=\frac{\sum_{k=1}^nx_{1k}x_{2k}}{\sqrt{\sum_{k=1}^nx_{1k}^2}\ sqrt{\ sum_{k=1}^nx_{2k}^2}}cos ( θ )=k = 1バツ1k _2 k = 1バツ2k _2 k = 1バツ1k _バツ2k _

  • コサイン距離はコサイン類似度とも呼ばれ、2つの商品の相関関係を判断することができ、
    例えば3人でスーパーに商品を買いに行った場合、1は買われ、0は買われないという表で表現されます。
アイテムスタッフ ある b c d e
1 1 0 0 1
B 0 1 1 0 0
C 1 0 0 0 1

A と B の類似度: cos ( θ ) = 1 ∗ 0 + 1 ∗ 1 + 0 ∗ 1 + 0 ∗ 0 + 1 ∗ 0 1 2 + 1 2 + 0 2 + 0 2 + 1 2 0 2 + 1 2 + 1 2 + 0 2 + 0 2 = 1 6 = 0.408 cos (θ)=\frac{ 1*0+1*1+0*1+0*0+1*0}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{0^2+1^2+1^2+0^2+0^2}}=\frac{1}{\sqrt{6}}=0.408cos ( θ )=12 +12 +02 +02 +12 02 +12 +12 +02 +02 1 0 + 1 1 + 0 1 + 0 0 + 1 0=6 1=0.408

A と C の類似度: cos ( θ ) = 1 ∗ 1 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 0 + 1 ∗ 1 1 2 + 1 2 + 0 2 + 0 2 + 1 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 2 6 = 0.816 cos (θ)=\frac{ 1*1+1*0+0*0+0*0+1*1}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{2}{\sqrt{6}}=0.816cos ( θ )=12 +12 +02 +02 +12 12 +02 +02 +02 +12 1 1 + 1 0 + 0 0 + 0 0 + 1 1=6 2=0.816

B と C の類似度: cos ( θ ) = 0 ∗ 1 + 1 ∗ 0 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 1 0 2 + 1 2 + 1 2 + 0 2 + 0 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 0 4 = 0 cos(θ)= \frac{0*1+ 1*0+1*0+0*0+0*1}{\sqrt{0^2+1^2+1^2+0^2+0^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{0}{\sqrt{4}}=0cos ( θ )=02 +12 +12 +02 +02 12 +02 +02 +02 +12 0 1 + 1 0 + 1 0 + 0 0 + 0 1=4 0=0

AとCの類似度が高く、ユーザーAが購入した商品に応じてAと類似度の高いCが推奨されることがわかります。

KDツリー

位置を使用してデータのカテゴリを予測する場合は、k 個の最近傍点を見つけて、この点とすべての近傍点の間の距離を計算し、それらを並べ替えて、モードを取る最も近い k を見つけて、それらを最も多くのカテゴリに分割します。比較的小さいデータの場合、計算速度は比較的速くなります。データ モデルをトレーニングする場合は、データ量が多く、予測データと各近傍データとの距離を 1 つずつ計算する必要があります。特に計算量が多くなりますが、最適化には KD ツリーを使用できます。

KNN の計算プロセスは、多数のサンプル点間の距離を計算することです。KNNの距離計算回数を削減し、探索効率を向上させるために、KDツリー(K-Dimensionalの略)が提案されている。KD ツリーは、K 次元空間内のデータ ポイントを分割するデータ構造です。KD ツリーの構築では、各ノードは k 次元の値点のバイナリ ツリーです。二分木なので、二分木の追加、削除、変更、問い合わせ操作が可能となり、検索効率が大幅に向上します。

  • 例 1: データセット {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)} があり、kd ツリーを構築します。
    ここに画像の説明を挿入
    6 つのデータ ポイントは、2 次元の座標軸上に表される 2 次元の点であり、kd ツリーの分割です。
  • 1. x1 軸の中央値 2、4、5、7、8、9 をセグメンテーション標準として使用し、数値を小さいものから大きいものに並べ替えます。数値が偶数の場合は、中央の 2 つの点を選択し、それらを加算して中央値 ((5+7)/2=6) を見つけます。
    • 1. (5,4) は (7,2) と 6 に近いので、(7,2) などの任意の点をルート ノードとして取得します。
    • 2. (7,2)を通り、x1軸に垂直な線を引き、2次元画面を左右に分割します。
  • 2. 左側の領域を x2 軸で分割し、中央値を求めて x2 の垂直線を作成し、
    • 1. 左側の領域に点が 3 つあり、x2 の値はそれぞれ 3、4、7、中央点は (5,4)、
    • 2. (5,4)を通ってx2に垂直な線を引き、左側の領域を上下に分割し、
    • 3. 下の領域をx1軸で分割し、ノードになった点を除くと(2,3)点だけが残るので、x1から(2,3)まで垂直線を引きます。
    • 4. 上の領域をx1軸で分割し、ノードになった点を除くと(4,7)点だけが残ったので、x1から(4,7)まで垂直線を引きます。
    • 5. 二分木に配置した点は左が小さく右が大きいので、左に(2,3)点、右に(4,7)点を配置します。
  • 3. 右側の領域をx2軸で分割し、中央値を求めてx2の縦線を作成します。
    • 1. (8,1) と (9,6) だけが残っているため、中央値と 2 つの点の間の距離は同じであり、(9,6) などの点がノードとしてランダムに選択されます。
    • 2. (9,6)を通ってx2軸に垂直な線を引き、右側の領域を上下に分割し、上部には点がありません
    • 3. 後半で (8,1) の中央値を見つけます。点は 1 つだけあり、この点が中央値です。この点を通って x1 軸に垂直線を引きます。取得された最後のノードは (8,1) です。
      ここに画像の説明を挿入
  • 例 2、ターゲット ポイント (3,4.5) があります。データ セット内でターゲット ポイントの最近傍を検索するにはどうすればよいですか?
    ここに画像の説明を挿入
    各点の距離を計算すると6回の計算が必要となり、データ量が多いと計算量が増加します。kd ツリーによる計算自体は再帰的で反復的なプロセスです。
  • 1. ルートノード (7,2) から判断すると、点 (3,4.5) の x1 軸上の番号は 3、3 は 7 より小さく、左側の小さい番号で点 (5,4) が見つかり、x2 次元の番号は 4、4.5 は 4 より大きく、右側 (大きい方の番号) に点 (4,7) が見つかり、一時的な最近傍は (4,7) になります。
  • 2. (3,4.5) を中心とし、点 (4,7) までの距離を半径として円を描き、青い円を取得します。明らかに (4,7) は点 (3,4.5) の最近傍ではありません。このとき、アルゴリズムはバックトラックする必要があり、ターゲット点を円の中心とし、一時的に隣接する点を半径として使用して円を作成します。2 点間の半径は 2.69 です。
  • 3. 前のノード (5,4) に戻り、対象点を中心とし、一時的に隣接する点 (5,4) を半径とする円を作成します。2 点間の半径は 2.06 です。
  • 4. 引き続き(2,3)まで戻り、対象点を円の中心とし、仮隣接点(2,3)を半径として円を作ります。2点間の半径は1.8で、(2,3)が最近傍点となります。このとき、(7,2)、(9,6)、(8,1)からの距離を計算する必要がなくなり、計算量が軽減されます

データセットの取得

一部のアルゴリズムをテストするために、実際の環境になく、特徴量エンジニアリング データが不足している場合は、これらのモデルを学習するときに、処理されたデータから学習できます。

関数を取得する

データを取得するためのインターフェース

sklearn.datasets 加载获取流行数据集
datasets.load_***() 获取小规模数据集,数据包含在datasets里
datasets.fetch_***(data_home=None) 获取大规模数据集,需要从网络上下载,
函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

ここに画像の説明を挿入

リターンセット

load 和 fetch 返回的数据类型(字典格式)
data:特征数据数组
target:标签数组
DESCR:数据描述
feature_names:特征名
target_names:标签名

ここに画像の説明を挿入

データのセグメンテーション

データの一部はモデルのトレーニングに必要であり、新しいデータの一部はモデルの品質を評価するために必要です。2 つのデータ セットが重なると結果が不正確になるため、データをトレーニング セット、テスト セット、検証セットに分割し、パラメーター調整前にデータをトレーニング セットとテスト セットに分割します。データセグメンテーションの方法: セットアウト法、データを直接 28 または 37 で割る; K 分割交差検証、データセットを 10 部分に分割し、1 つの部分をテストセットとして使用し、残りをトレーニングセットとして順番に使用し、10 回の結果の平均を取得します; セルフヘルプ法、トレーニングセットを置換してランダムに抽出します。最も一般的に使用されるのはホールドアウト法です。

メソッド API を脇に置く

プログラムで実現し、データセットを3つの部分と7つの部分に分割し、numpyとpandasの選択したデータを使用してそれを行い、データの全長を求めて切り出し、sklearnを使用してトレーニングセットのテスト分割を行います。

sklearn.model_selection.train_test_split(arrays,*options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 训练特征值,测试特征值,训练目标值,测试目标值

ここに画像の説明を挿入
アルゴリズムとモデルはランダムです。同じアルゴリズムと同じデータセットを複数回実行すると、結果は異なります。同じコードと同じモデルを異なる人がトレーニングした場合、結果は異なります。データのセグメント化もランダムであり、random_state パラメーターを使用して、各トレーニングの結果が同じであることを確認できます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/hwwaizs/article/details/131843096