初心者のためのデータ学習: Python でシンプルな教師あり学習アルゴリズムを実装する方法を学習します

初心者のためのデータ学習: Python でシンプルな教師あり学習アルゴリズムを実装する方法を学習します

[[220586]]

編纂者:ウェンミン、ダ・ジェチョン、ティエンペイ

最も広く使用されている機械学習手法である教師あり学習は、常にデータから情報をマイニングするための重要な手段となっています。教師なし学習が増加している最近では、教師あり学習は依然として機械学習を始めるための鍵となります。

この教師あり学習チュートリアルは、機械学習を始めたばかりの初心者向けです。

もちろん、すでに教師あり学習に精通している場合は、このチュートリアルを簡単に見て、理解度をテストすることもできます。

1. 教師あり学習とは何ですか?

教師あり学習では、まずトレーニング属性とターゲット属性を含むデータセットをインポートします。教師あり学習アルゴリズムは、データセットからトレーニング サンプルとそのターゲット変数の関係を学習し、学習した関係を使用して新しいサンプル (ラベルなしサンプル) を分類します。

教師あり学習がどのように機能するかを説明するために、生徒が勉強に費やした時間に基づいて生徒のテストのスコアを予測する例を使用しましょう。

数学的には、Y = f(X) + Cであり、

  • fは生徒の勉強時間とテストの成績の関係を表す
  • Xは入力(学習時間数)を表します
  • Yは出力(テストスコア)を表します
  • Cはランダムエラーを表す

教師あり学習アルゴリズムの最終的な目標は、予測結果 Y の精度が最大化されるように新しい入力 X を与えることです。教師あり学習を実装する方法は数多くありますが、ここでは最も一般的な方法をいくつか紹介します。

与えられたデータセットに応じて、機械学習は分類と回帰の 2 つのカテゴリに分けられます。特定のデータセットの出力値がカテゴリである場合、解決すべき問題は分類問題です。与えられたデータセットの出力値が連続している場合、問題は回帰問題です。

2つの例を見てみましょう。

  • 分類: 猫か犬かを判断します。
  • 回帰分析: 家はいくらで売れたでしょうか?

2. 分類

医療研究者が乳がんのデータを分析して、患者が受ける治療オプションを 3 つのうちどれにするかを予測したいという例を考えてみましょう。このデータ分析問題は分類問題であり、「治療計画 A」、「治療計画 B」、「治療計画 C」などのカテゴリ ラベルを予測する分類モデルの構築を伴います。

分類は、離散的かつ順序付けられていないクラス ラベルを予測する予測問題です。分類は、学習ステップと分類ステップの 2 つのステップで構成されます。

1. 分類方法と選択方法

一般的な分類アルゴリズムの例:

  • K 近傍
  • 決定木
  • ナイーブベイズ
  • サポートベクターマシン

学習ステップでは、分類モデルはトレーニング セット データを分析して分類子を構築します。分類ステップでは、分類器が指定されたデータを分類します。分析に使用されるデータセット (データとそれに対応するラベルを含む) は、トレーニング セットとテスト セットに分割されます。トレーニング セットは、分析に使用されるデータセットからランダムに選択されます。残りのデータセットはテスト セットを構成します。テスト セットとトレーニング セットは互いに独立しています。つまり、テスト セットのデータは分類器に組み込まれません。

テスト セットは、分類器の予測精度を評価するために使用されます。分類器の精度は、テスト セット内の正しい予測の割合として表されます。より高い精度を達成するための最善のアプローチは、複数の異なるアルゴリズムをテストし、各アルゴリズムに対して異なるパラメータを試すことです。最適なアルゴリズムとパラメータをインタラクティブにテストして選択できます。

特定の問題に対してアルゴリズムを選択する場合、アルゴリズムの精度、トレーニング時間、直線性、パラメータの数、特殊なケースを考慮する必要があります。

IRIS データセットに対して sklearn で KNN を実装し、入力に基づいて花の種類を分類します。

まず、機械学習アルゴリズムを適用するには、特定のデータセットの構成を理解する必要があります。この例では、sklearn パッケージに組み込まれている IRIS データセットを使用します。それでは、コードを使用して IRIS データセットを見てみましょう。

コンピュータに Python がインストールされていることを確認してください。次に、PIP 経由で次の Python ライブラリをインストールします。

  1. pip パンダをインストールする
  2. matplotlib を pip でインストールします
  3. pip で scikit-learn をインストールします

次のコードでは、pandas のいくつかのメソッドを使用して、IRIS データセットのいくつかのプロパティを表示します。

  1. sklearnからデータセットをインポートする
  2. pandasをpdとしてインポートする
  3. matplotlib.pyplot を plt としてインポートします。
  4.  
  5. # scikit-learn オブジェクトから IRIS データセットを iris 変数に読み込みます。
  6. アイリス= datasets.load_iris ()
  7.  
  8. # irisのtype/typeオブジェクトを出力します
  9. 印刷(タイプ(アイリス))
  10. # <クラス'sklearn.datasets.base.Bunch' >  
  11.  
  12. # irisデータの辞書キーを出力します
  13. 印刷(iris.keys())
  14.  
  15. # 指定された属性の型/型オブジェクトを出力します
  16. 印刷(タイプ(iris.data)、タイプ(iris.target))
  17.  
  18. # データセットの行数と列数を出力します
  19. iris.data.shape を印刷します
  20.  
  21. # データのターゲットセットを出力します
  22. iris.target_names を印刷します
  23.  
  24. # アイリストレーニングデータセットをロードする
  25. X =アイリスデータ
  26.  
  27. # 絞りターゲットセットをロード
  28. Y =アイリスターゲット
  29.  
  30. # データセットの型をデータフレームに変換する
  31. df = pd .DataFrame(X,= iris .feature_names)
  32.  
  33. # データフレームの最初の 5 つのタプルを出力します。
  34. 印刷(df.head())

2. 出力:

  1. <クラス'sklearn.datasets.base.Bunch' >  
  2. dict_keys(['データ', 'ターゲット', 'ターゲット名', 'DESCR', '機能名'])]
  3. <クラス'numpy.ndarray' >   <クラス'numpy.ndarray' >  
  4. (150、4)
  5. ['setosa' 'versicolor' 'virginica']
  6. 萼片の長さ (cm) 萼片の幅 (cm) 花弁の長さ (cm) 花弁の幅 (cm)
  7. 0 5.1 3.5 1.4 0.2
  8. 1 4.9 3.0 1.4 0.2
  9. 2 4.7 3.2 1.3 0.2
  10. 3 4.6 3.1 1.5 0.2
  11. 4 5.0 3.6 1.4 0.2

3. Sklearn の K 最近傍アルゴリズム

アルゴリズムがトレーニング セット データのみを保存し、テスト セット データが提供されるのを待つ場合、このアルゴリズムは「怠惰な学習方法」と見なすことができます。テスト セット データが提供されるまで、保存されているトレーニング セット サンプルとの類似性に基づいて新しいサンプルが分類されることはありません。

K 最近傍分類器は、遅延学習法です。

K 最近傍法は、テスト サンプルを類似のトレーニング セット データと比較する類推学習に基づいています。トレーニング セットには n 個の属性表現があります。各サンプルは n 次元空間内の点で表されます。このようにして、トレーニング セット内のすべてのサンプルが n 次元パターン空間に格納されます。未知のサンプルが与えられた場合、K 最近傍分類器はパターン空間内で未知のサンプルに最も近い k 個のトレーニング サンプルを検索します。これらの k 個のトレーニング サンプルは、未知のサンプルの k 個の最も近い近傍です。

「近さ」はユークリッド距離などの距離によって測定されます。最適な K 値は実験を通じて決定できます。

次のコードでは、KNN 分類器をインポートし、それを入力データに適用して、花を分類します。

  1. sklearnからデータセットをインポートする
  2. sklearn.neighbors から KNeighborsClassifier をインポートします
  3.  
  4. # sklearnからirisデータセットをロードする
  5. アイリス= datasets.load_iris ()
  6.  
  7. # 近傍を持つ値を持つ KNN 分類器クラスの を宣言します。
  8. knn = K近隣分類子( n_近隣= 6 )
  9.  
  10. # トレーニングデータとターゲット値を使用してモデルを適合させる
  11. knn.fit(iris['データ'], iris['ターゲット'])
  12.  
  13. # クラスラベルを予測するデータを提供する
  14. バツ= [
  15. [5.9, 1.0, 5.1, 1.8],
  16. [3.4、2.0、1.1、4.8]、
  17. ]
  18.  
  19. # 提供されたデータを印刷します
  20. 印刷(X)
  21.  
  22. # Xの予測クラスラベルを保存する
  23. 予測= knn.predict (X)
  24.  
  25. # Xの予測クラスラベルを出力します
  26. 印刷(予測)

出力:

  1. [1 1]

このうち、0、1、2はそれぞれ異なる花を表しています。この例では、与えられた入力に対して、KNN 分類器はそれらすべてをクラス 1 の花として予測します。

IRISデータセットのKNN分類の直感的な視覚化

IV. 回帰

回帰は一般的に、2 つ以上の変数間の関係を決定することとして定義されます。たとえば、与えられたデータ X に基づいて、ある人の収入を予測したいとします。ここで、目的変数とは、注目して予測したい未知の変数のことを指し、連続とは、Y の値にギャップがないことを意味します。

収益の予測は典型的な回帰問題です。入力内容には、雇用期間、学歴、役職、居住地など、収入を予測できる収入に関連するすべての個人情報(特徴)を含める必要があります。

1. 回帰モデル

一般的な回帰モデルとしては、

  • 線形回帰
  • ロジスティック回帰
  • 多項式回帰

線形回帰は、直線(回帰線)を当てはめることによって、従属変数(Y)と 1 つ以上の独立変数(X)の関係を確立します。

数学的に表現すると、h(xi) = βo + β1 * xi + eであり、ここで

  • βoは切片である
  • β1は傾きである
  • eは誤差項である

図で表すと、

ロジスティック回帰は、特徴と特定の出力の確率との関係を見つけることでカテゴリを予測するアルゴリズムです。

もちろん、ロジスティック回帰を分類アルゴリズムとして分類することもできますが、先ほど述べたように、ロジスティック回帰の出力は、実際には対象オブジェクトが特定のカテゴリに属する​​確率です。確率は連続的であるため、ロジスティック回帰は依然として回帰アルゴリズムとして考慮されます。

数学的に表現すると、p(X) = βo + β1 * X、ただしp(x) = p(y = 1 | x)

グラフィカルな表現は次のとおりです。

多項式回帰は、独立変数 x と従属変数 y の関係を x の n 次多項式に当てはめる回帰アルゴリズムです。

2. 線形回帰問題を解く

データセットXとそれに対応する目標値Yがあり、予測誤差を最小化することで線形モデルを適合させるために通常の最小二乗法を使用する。

指定されたデータセットもトレーニング セットとテスト セットに分割されます。トレーニング セットは既知のラベルを持つ例で構成されているため、アルゴリズムはこれらの既知のラベルを持つ例から学習できます。テスト セット サンプルにはラベルが含まれていないため、予測しようとしているサンプルのラベル値がわかりません。

トレーニングする機能を選択し、線形回帰を適用してトレーニング データに適合させ、テスト セットの出力を予測します。

3. Sklearn による線形回帰の実装

  1. sklearnからデータセットをインポートし、linear_model
  2. matplotlib.pyplot を plt としてインポートします。
  3. numpyをnpとしてインポートする
  4.  
  5. # 糖尿病データセットをロードする
  6. 糖尿病= datasets.load_diabetes ()
  7.  
  8.  
  9. # トレーニングには1つの機能のみを使用する
  10. 糖尿病diabetes_X = diabetes.data[:, np.newaxis, 2]
  11.  
  12. # データをトレーニング/テストセットに分割する
  13. 糖尿病_X糖尿病_X_train = 糖尿病_X[:-20]
  14. 糖尿病_X糖尿病_X_テスト= 糖尿病_X[-20:]
  15.  
  16. # ターゲットをトレーニング/テストセットに分割する
  17. 糖尿病diabetes_y_train = 糖尿病.target[:-20]
  18. 糖尿病diabetes_y_test = diabetes.target[-20:]
  19.  
  20. # 線形回帰オブジェクトを作成する
  21. regr = linear_model.線形回帰()
  22.  
  23. # トレーニングセットを使用してモデルをトレーニングする
  24. regr.fit(糖尿病_X_train、糖尿病_y_train)
  25.  
  26. # 入力データ
  27. print('入力値')
  28. 印刷(diabetes_X_test)
  29.  
  30. # テストセットを使用して予測を行う
  31. diabetes_y_pred = regr.predict (diabetes_X_test)
  32.  
  33. # 予測データ
  34. print("予測出力値")
  35. 印刷(diabetes_y_pred)
  36.  
  37. # プロット出力
  38. plt.scatter(diabetes_X_test、diabetes_y_test、= 'black' )
  39. plt.plot(diabetes_X_test、diabetes_y_pred、= '赤' 線幅= 1 )
  40.  
  41. plt.show()

4. 入力

入力値:

  1. [
  2. [ 0.07786339 ] [ -0.03961813 ] [ 0.01103904 ] [ -0.04069594 ]
  3. [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126]
  4. [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656]
  5. [ 0.00133873 ] [ -0.02345095 ] [ -0.07410811 ] [ 0.01966154 ]
  6. [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ]
  7. ]

予測出力値:

  1. [
  2. 225.9732401 115.74763374 163.27610621 114.73638965
  3. 120.80385422 158.21988574 236.08568105 121.81509832
  4. 99.56772822 123.83758651 204.73711411 96.53399594
  5. 154.17490936 130.91629517 83.3878227 171.36605897
  6. 137.99500384 137.99500384 189.56845268 84.3990668
  7. ]

V. 結論

よく使われる教師あり学習のPythonライブラリについて言及する

  • サイキットラーン
  • テンソルフロー
  • ピトーチ

オリジナルリンク: https://towardsdatascience.com/supervised-learning-with-python-cf2c1ae543c1

[この記事は51CTOコラムBig Data Digest、WeChatパブリックアカウント「Big Data Digest(id: BigDataDigest)」のオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  MIT、ビデオ遅延防止に新たなAI技術を採用

>>:  ニューラルネットワーク関係抽出のための構文的に敏感なエンティティ表現

推薦する

私たちのプライバシーはどこにも見つからない

あなたに関するあらゆることが、さまざまな形で世界に明らかにされています。 [[387859]] 3月...

機械プログラミングが次に投資すべきテクノロジーである理由は何ですか?

[[413321]] [51CTO.com クイック翻訳]一連の新しいツールは、機械学習やその他の...

...

LSTM ニューラルネットワークを使用して株価の動向を予測する

[[434750]] Python 中国語コミュニティ (ID: python-china) LST...

...

米メディア:人工知能(AI)は、人間の推論の欠点を伴わずにコンピューティングの利点を実現する

[[334808]]ミラロのコメント – 今日の軍事コンピューティングに関連するものはすべて人工知能...

大学卒業後、彼はGoogleに入社し、先駆的な作品「Thinking Chain」を執筆した。このOpenAIの新人は、学部生の質問に答えている。

「思考の連鎖(CoT)」の概念を注意深く研究したことがあるなら、おそらく Jason Wei とい...

「顔スキャン」のリスクについてどれくらい知っていますか?

情報化の急速な発展に伴い、顔認証や指紋認証などの技術が徐々に普及しつつあります。技術の進歩によっても...

...

機械学習の導入を容易にする 6 つのツール

今日、多くのベンダーは、データインテリジェントなビジネスユーザーが AI テクノロジーを採用できるよ...

ジェネレーティブAIはCIOにとって成否を分ける瞬間

IT リーダーは、まずユースケースに合わせて戦略を最適化し、次世代 AI の可能性と落とし穴を実用的...

2020年に人工知能はどのように発展するでしょうか?知っておくべき6つのトレンド

過去1年を振り返ると、人工知能の発展は繁栄し、多彩なものであったと言えます。人工知能が3回連続で政府...

...

漫画は爆発的な効果でAIに変身し、サーバーが何度も圧倒された

[[436077]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

MoEとMambaが協力し、状態空間モデルを数百億のパラメータに拡張

状態空間モデル (SSM) は、最近注目を集めている Transformer の代替手段です。その利...