前書き

機械学習は、人工知能(AI)のサブフィールドです。 機械学習の目標は一般に、データの構造を理解し、そのデータを人々が理解して利用できるモデルに適合させることです。

機械学習はコンピューターサイエンスの分野ですが、従来の計算アプローチとは異なります。 従来のコンピューティングでは、アルゴリズムは、計算または問題解決のためにコンピューターで使用される明示的にプログラムされた命令のセットです。 代わりに、機械学習アルゴリズムにより、コンピューターはデータ入力のトレーニングを行い、特定の範囲内の値を出力するために統計分析を使用できます。 このため、機械学習は、データ入力に基づいて意思決定プロセスを自動化するために、サンプルデータからモデルを構築するコンピューターを容易にします。

今日のテクノロジーユーザーは、機械学習の恩恵を受けています。 顔認識技術により、ソーシャルメディアプラットフォームは、ユーザーが友人の写真にタグを付けて共有できるようになります。 光学式文字認識(OCR)テクノロジーは、テキストの画像を移動可能なタイプに変換します。 機械学習を搭載した推奨エンジンは、ユーザーの好みに基づいて、次に見る映画やテレビ番組を提案します。 機械学習に頼ってナビゲートする自動運転車はすぐに消費者に利用可能になるかもしれません。

機械学習は継続的に発展している分野です。 このため、機械学習の方法論で作業するとき、または機械学習プロセスの影響を分析するときに留意すべき考慮事項がいくつかあります。

このチュートリアルでは、教師あり学習と教師なし学習の一般的な機械学習方法と、k最近傍アルゴリズム、決定木学習、深層学習を含む機械学習の一般的なアルゴリズムアプローチについて説明します。 どのプログラミング言語が機械学習で最も使用されているかを調べ、それぞれのプラスとマイナスの属性をいくつか提供します。 さらに、機械学習アルゴリズムによって永続化されるバイアスについて説明し、アルゴリズムを構築する際にこれらのバイアスを防ぐために留意すべきことを検討します。

機械学習法

機械学習では、タスクは一般に幅広いカテゴリに分類されます。 これらのカテゴリは、学習がどのように受信されるか、または学習に関するフィードバックが開発されたシステムにどのように与えられるかに基づいています。

最も広く採用されている機械学習方法の2つは、人間によってラベル付けされたサンプルの入力データと出力データに基づいてアルゴリズムをトレーニングする*教師あり学習*と、ラベル付きデータを検出せずにアルゴリズムを提供する*教師なし学習*です入力データ内の構造。 これらの方法をさらに詳しく見ていきましょう。

教師あり学習

教師あり学習では、コンピューターには目的の出力でラベル付けされた入力例が提供されます。 この方法の目的は、アルゴリズムが実際の出力を「学習」出力と比較して「学習」し、エラーを見つけて、それに応じてモデルを変更できるようにすることです。 したがって、教師あり学習では、パターンを使用して、追加のラベルなしデータのラベル値を予測します。

たとえば、教師あり学習では、アルゴリズムに「+ fish 」とラベル付けされたサメの画像と「 water 」とラベル付けされた海の画像をデータに供給することができます。 このデータについて学習することにより、教師あり学習アルゴリズムは、ラベル付けされていないサメ画像を「 fish 」として、ラベル付けされていない海洋画像を「 water +」として後で識別できるはずです。

教師あり学習の一般的な使用例は、履歴データを使用して統計的に可能性のある将来のイベントを予測することです。 過去の株式市場情報を使用して、今後の変動を予測したり、スパムメールのフィルタリングに使用したりする場合があります。 教師あり学習では、タグ付きの犬の写真を入力データとして使用して、タグなしの犬の写真を分類できます。

教師なし学習

教師なし学習では、データにラベルは付けられないため、学習アルゴリズムは入力データ間の共通性を見つけるために残されます。 ラベル付けされていないデータはラベル付けされたデータよりも豊富であるため、教師なし学習を促進する機械学習法は特に価値があります。

教師なし学習の目標は、データセット内の隠れたパターンを発見するのと同じくらい簡単かもしれませんが、機能学習の目標もあるかもしれません。

教師なし学習は、トランザクションデータによく使用されます。 顧客とその購入の大規模なデータセットがある場合がありますが、人間としては、顧客プロファイルとその購入タイプからどのような類似の属性を引き出すことができるのか理解できないでしょう。 このデータを教師なし学習アルゴリズムに入力すると、無香料の石鹸を購入する特定の年齢層の女性が妊娠する可能性が高いと判断される可能性があるため、妊娠とベビー用品に関連するマーケティングキャンペーンをこのオーディエンスを対象にターゲットに設定できます購入数を増やすため。

「正しい」答えを言わずに、教師なし学習方法は、意味のある方法で整理するために、より広範で一見無関係な複雑なデータを調べることができます。 教師なし学習は、不正なクレジットカードの購入や、次に購入する製品を推奨する推奨システムなどの異常検出によく使用されます。 教師なし学習では、タグ付けされていない犬の写真をアルゴリズムの入力データとして使用して、類似性を見つけ、犬の写真を一緒に分類できます。

アプローチ

分野として、機械学習は計算統計と密接に関連しているため、統計の背景知識は機械学習アルゴリズムの理解と活用に役立ちます。

統計を研究していない人にとっては、量的変数間の関係を調査するために一般的に使用される手法であるため、最初に相関と回帰を定義することが役立ちます。 *相関*は、従属変数または独立変数として指定されていない2つの変数間の関連性の尺度です。 基本レベルの*回帰*は、1つの従属変数と1つの独立変数との関係を調べるために使用されます。 独立変数が既知の場合、回帰統計を使用して従属変数を予測できるため、回帰により予測機能が有効になります。

機械学習へのアプローチは継続的に開発されています。 この目的のために、執筆時点で機械学習で使用されている一般的なアプローチをいくつか紹介します。

k最近傍

k最近傍アルゴリズムは、回帰だけでなく分類にも使用できるパターン認識モデルです。 多くの場合k-NNと省略されますが、k最近傍の* k *は正の整数で、通常は小さいです。 分類または回帰のどちらでも、入力は空間内のk個の最も近いトレーニング例で構成されます。

k-NN分類に焦点を当てます。 このメソッドでは、出力はクラスメンバーシップです。 これにより、k個の最近傍の中で最も一般的なクラスに新しいオブジェクトが割り当てられます。 k = 1の場合、オブジェクトは単一の最近傍のクラスに割り当てられます。

k最近傍の例を見てみましょう。 下の図には、青いひし形のオブジェクトとオレンジ色の星のオブジェクトがあります。 これらは、ダイヤモンドクラスとスタークラスの2つの別個のクラスに属します。

image:https://assets.digitalocean.com/articles/machine-learning/intro-to-ml/k-NN-1-graph.png [k-nearest neighbor initial data set]

新しいオブジェクト(この場合は緑のハート)にスペースが追加されると、機械学習アルゴリズムでハートを特定のクラスに分類する必要があります。

image:https://assets.digitalocean.com/articles/machine-learning/intro-to-ml/k-NN-2-graph.png [分類する新しいオブジェクトで設定されたk-最近傍データ]

k = 3を選択すると、アルゴリズムは緑のハートの3つの最近傍を見つけて、ダイヤモンドクラスまたは星クラスのいずれかに分類します。

この図では、緑のハートの3つの最近傍は、1つのダイヤモンドと2つの星です。 したがって、アルゴリズムは心臓を星クラスで分類します。

image:https://assets.digitalocean.com/articles/machine-learning/intro-to-ml/k-NN-3-graph.png [分類が完了したk-最近傍データセット]

最も基本的な機械学習アルゴリズムの中で、k最近傍は、システムにクエリが行われるまでトレーニングデータを超える一般化が行われないため、「遅延学習」の一種と見なされます。

決定木学習

一般的な使用では、意思決定ツリーを使用して、意思決定を視覚的に表し、意思決定を表示または通知します。 機械学習とデータマイニングを使用する場合、ディシジョンツリーは予測モデルとして使用されます。 これらのモデルは、データに関する観察結果をデータの目標値に関する結論にマッピングします。

決定木の学習の目標は、入力変数に基づいてターゲットの値を予測するモデルを作成することです。

予測モデルでは、観測によって決定されるデータの属性はブランチで表され、データの目標値に関する結論は葉で表されます。

ツリーを「学習」すると、ソースデータは、属性値テストに基づいてサブセットに分割されます。属性値テストは、派生した各サブセットで再帰的に繰り返されます。 ノードのサブセットがターゲット値と同等の値を持つと、再帰プロセスが完了します。

誰かが釣りに行くべきかどうかを判断できるさまざまな条件の例を見てみましょう。 これには、気象条件と気圧条件が含まれます。

image:https://assets.digitalocean.com/articles/machine-learning/intro-to-ml/decision-tree-diagram.png [釣りの意思決定ツリーの例]

上記の簡略化された決定ツリーでは、ツリーを介して適切なリーフノードにソートすることにより、例が分類されます。 次に、特定のリーフに関連付けられた分類を返します。この場合は、「+ Yes 」または「 No +」のいずれかです。 ツリーは、釣りに行くのに適しているかどうかに基づいて1日の条件を分類します。

真の分類ツリーデータセットには、上記で概説したものよりも多くの機能がありますが、関係を判断するのは簡単です。 デシジョンツリーの学習を使用する場合、選択する機能、分割に使用する条件、デシジョンツリーが明確な終了に達するタイミングの理解など、いくつかの決定を行う必要があります。

深層学習

ディープラーニングは、人間の脳が光と音の刺激を視覚と聴覚に処理する方法を模倣しようとします。 ディープラーニングアーキテクチャは、生物学的ニューラルネットワークに触発され、ハードウェアとGPUで構成される人工ニューラルネットワークの複数のレイヤーで構成されます。

ディープラーニングでは、データの特徴(または表現)を抽出または変換するために、非線形処理ユニットレイヤーのカスケードを使用します。 1つの層の出力は、連続する層の入力として機能します。 深層学習では、アルゴリズムを監視してデータの分類に役立てることも、教師なしでパターン分析を実行することもできます。

現在使用および開発されている機械学習アルゴリズムの中で、深層学習はほとんどのデータを吸収し、いくつかの認知タスクで人間を打ち負かすことができました。 これらの属性により、ディープラーニングは人工知能の分野で大きな可能性を持つアプローチになりました。

コンピュータービジョンと音声認識はどちらも、ディープラーニングアプローチからの大きな進歩を実現しています。 IBM Watsonは、ディープラーニングを活用するシステムの有名な例です。

プログラミング言語

機械学習に特化する言語を選択する場合、現在の求人広告に記載されているスキルや、機械学習プロセスに使用できるさまざまな言語で利用可能なライブラリを検討することをお勧めします。

2016年12月のIndeed.comのhttps://www.ibm.com/developerworks/community/blogs/jfp/entry/What_Language_Is_Best_For_Machine_Learning_And_Data_Science [求人広告から取得したデータ]から、Pythonが最も求められているプログラミングであると推測できます機械学習の専門分野における言語。 Pythonの後にJava、R、C ++が続きます。

  • Python *の人気は、https://www.tensorflow.org/ [TensorFlow]、http://pytorch.org/ [PyTorch]、およびhttps://keras.io/[Keras]。 読みやすい構文とスクリプト言語として使用できる機能を備えた言語として、Pythonはデータの前処理とデータの直接操作の両方で強力かつ簡単であることが証明されています。 scikit-learn機械学習ライブラリは、Python開発者がすでによく知っている既存のPythonパッケージ、つまりhttp://www.numpy.org/の上に構築されています。 [NumPy]、https://www.scipy.org/ [SciPy]、およびhttps://matplotlib.org/[Matplotlib]。

Pythonの使用を開始するには、「https://www.digitalocean.com/community/tutorial_series/how-to-code-in-python-3[Python 3のコーディング方法]」のチュートリアルシリーズを読むか、または「https://www.digitalocean.com/community/tutorials/how-to-build-a-machine-learning-classifier-in-python-with-scikit-learn [機械学習分類子を構築する方法scikit-learnを使用したPython]」または「https://www.digitalocean.com/community/tutorials/how-to-perform-neural-style-transfer-with-python3-and-pytorch [ニューラルスタイル転送の実行方法] Python 3およびPyTorch]。」

  • Java *はエンタープライズプログラミングで広く使用されており、一般にエンタープライズレベルで機械学習にも取り組んでいるフロントエンドデスクトップアプリケーション開発者によって使用されています。 通常、プログラミングの初心者が機械学習について学びたい場合、これは最初の選択肢ではありませんが、Java開発のバックグラウンドを持つ人が機械学習に適用することを好みます。 業界の機械学習アプリケーションに関しては、サイバー攻撃や不正検出のユースケースなど、ネットワークセキュリティにJavaがPythonよりも多く使用される傾向があります。

Javaの機械学習ライブラリには、https://deeplearning4j.org/ [Deeplearning4j]があります。これは、JavaとScalaの両方用に作成されたオープンソースの分散型深層学習ライブラリです。 MALLET MA chine L L anguag * E * T oolkitの獲得)は機械学習アプリケーションを可能にします自然言語処理、トピックモデリング、ドキュメント分類、クラスタリングなどのテキスト。およびhttp://www.cs.waikato.ac.nz/ml/weka/index.html[Weka]、データマイニングタスクに使用する機械学習アルゴリズムのコレクション。

  • R *は、主に統計計算に使用されるオープンソースのプログラミング言語です。 近年人気が高まっており、学界の多くの人に好まれています。 Rは、通常、産業生産環境では使用されませんが、データサイエンスへの関心が高まっているため、産業用途で使用されています。 Rでの機械学習の一般的なパッケージには、http://topepo.github.io/caret/index.html [caret]( C lassification A nd RE gression Tの略) トレーニング)予測モデルの作成、https://cran.r-project.org/web/packages/randomForest/ [randomForest]分類および回帰、およびhttps://cran.r-project.org/web/ packages / e1071 / index.html [e1071]には統計と確率理論の関数が含まれています。

  • C *は、ゲームまたはロボットアプリケーション(ロボット移動を含む)の機械学習と人工知能に最適な言語です。 組み込みコンピューティングハードウェアの開発者とエレクトロニクスエンジニアは、言語の習熟度と制御レベルにより、機械学習アプリケーションでC またはCを好む傾向があります。 C ++で使用できる機械学習ライブラリには、スケーラブルなhttp://www.mlpack.org/[mlpack]、http://dlib.net/ml.html[Dlib]があり、広範な機械学習アルゴリズムを提供しています。モジュール式のオープンソースhttp://image.diku.dk/shark/[Shark]。

人間のバイアス

データと計算分析により、客観的な情報を受け取っていると思わせるかもしれませんが、そうではありません。データに基づいているからといって、機械学習の出力がニュートラルであることを意味するわけではありません。 人間の偏見は、データの収集方法、編成方法、そして最終的には機械学習がそのデータと相互作用する方法を決定するアルゴリズムで役割を果たします。

たとえば、アルゴリズムをトレーニングするためのデータとして「魚」の画像を提供しており、これらの人が圧倒的に金魚の画像を選択している場合、コンピューターはサメを魚として分類しない場合があります。 これはサメを魚として偏見を生じさせ、サメは魚としてカウントされません。

科学者の歴史的写真を訓練データとして使用する場合、コンピューターは色のある人や女性でもある科学者を適切に分類できない場合があります。 実際、最近のピアレビューされた研究は、AIおよび機械学習プログラムが人種および性別の偏見を含む人間に似たバイアスを示すことを示しています。 たとえば、「http://science.sciencemag.org/content/356/6334/183 [言語コーパスから自動的に得られたセマンティクスには人間のようなバイアスが含まれています」」および「https://homes.cs.washington.edu/ %7Emy89 / publications / bias.pdf [ショッピングも好きな男性:コーパスレベルの制約を使用したジェンダーバイアス増幅の削減]」[PDF]。

機械学習がビジネスでますます活用されるようになると、キャッチされていないバイアスがシステムの問題を永続させ、人々がローンの資格を得たり、高給の仕事の機会に広告を表示したり、同日配達オプションを受け取ったりするのを妨げる可能性があります。

人の偏見は他の人にマイナスの影響を与える可能性があるため、それを認識し、できるだけ排除するように努めることが非常に重要です。 これを達成するための1つの方法は、プロジェクトに取り組んでいる多様な人々がいること、および多様な人々がプロジェクトをテストおよびレビューしていることを確認することです。 他の人は、https://www.theguardian.com/technology/2017/jan/27/ai-artificial-intelligence-watchdog-needed-to-prevent-discriminatory-automated-decisions [アルゴリズムを監視および監査するための規制サードパーティを求めています]、https://www.theguardian.com/technology/2017/apr/13/ai-programs-exhibit-racist-and-sexist-biases-research-reveals [バイアスを検出できる代替システムの構築]、およびhttps: //www.fidelitylabs.com/2017/06/14/combating-machine-learning-bias/ [倫理レビュー]データサイエンスプロジェクト計画の一環として。 バイアスについての意識を高め、私たち自身の無意識のバイアスに留意し、機械学習プロジェクトとパイプラインの公平性を構築することで、この分野のバイアスと戦うことができます。

image:https://assets.digitalocean.com/articles/machine-learning/intro-to-ml/machine-learning-book.png [DigitalOcean Machine Learning]

結論

このチュートリアルでは、機械学習のユースケースのいくつか、フィールドで使用される一般的な方法と一般的なアプローチ、適切な機械学習プログラミング言語をレビューし、また、アルゴリズムで複製される無意識のバイアスに関して留意すべきいくつかの事項をカバーしました。

機械学習は絶えず革新されている分野であるため、アルゴリズム、方法、およびアプローチは変化し続けることに留意することが重要です。

「https://www.digitalocean.com/community/tutorials/how-to-build-a-machine-learning-classifier-in-python-with-scikit-learn[How To Build a scikit-learnを使用したPythonの機械学習分類子]」または「https://www.digitalocean.com/community/tutorials/how-to-perform-neural-style-transfer-with-python3-and-pytorch [実行方法] Python 3とPyTorchを使用したニューラルスタイルの転送」をご覧ください。https://www.digitalocean.com/community/tags/data-analysis/tutorials [Data Analysis]チュートリアルを読むことで、テクノロジー業界でのデータの操作について詳しく知ることができます。 。