リンゴとオレンジを区別する簡単な機械学習アルゴリズム


(この記事はもともとはLiveEdu blog ).
Machine Learning(MLと略される)は、自動的に例から学び、ハードコード化規則に頼ることなくその経験から改善する能力を備えたアプリケーションを収容するコンピューターサイエンスの分野です.
機械学習によって、コンピュータは隠れた洞察を特定して、最小限の人間の介入で提供されるデータの例に基づいて正確な予測をすることが可能です.
たとえば、5年以上のML経験を持っているAndreybuは、株式市場データを予測できるモデルを作成しました.あなたは見ることができますし、彼のプロジェクトから学ぶhere .
この記事では、アップルとオレンジを区別できる簡単な機械学習アルゴリズムを作成する方法を説明します.
機械学習なしで、そのような問題に解決策を見つけることはいくつかの一連のコードを書く必要があるかもしれません.mlプロセスを簡素化します.
簡単に言うと、2つの果物の違いを学習し、それに応じて予測を行うことができるマシン学習アルゴリズムを作成します.

始めましょう


我々は、使用するつもりですAnaconda オープンソースPython配布物.それは私たちのアルゴリズムを実装するために使用する機械学習ライブラリです.
この例では、将来のイベントを予測するために既知のデータセット(トレーニングデータセットと呼ばれる)を利用した教師付きマシン学習アルゴリズムを使用する予定です.
入力データと出力値からなるトレーニングデータセットは,提供される例から学び,2つの果実を区別するための経験を利用する.
教師付き学習レシピの一般的な流れを以下に示します.
  • トレーニングデータ
  • 分類器を訓練する
  • 予測する
  • 手順ごとに話しましょう.

    研修データの収集


    トレーニングデータは、私たちがその違いに応じて分類するリンゴとオレンジの例です.
    ここでは、2つの果物の特徴を使用して区別する表を示します.

    上記のように、果実はその重量と質感によって区別される.
    すべての行の最後の列は、機械学習のラベルと呼ばれています.この場合、ラベルはオレンジまたはリンゴでありえる.
    テーブルの各行をデータポイントと呼ぶ.テーブル全体をトレーニングデータと呼ぶ.
    結果の精度がトレーニングデータに提供される例の数に依存することに注意することは重要です.
    さて、Pythonコードを使用して、テーブルで何が起こっているかを示しましょう.
    2つの変数(最初の2列のデータ)とラベル(最後の列のデータ)を使用します.
    言い換えると、特徴は入力データであり、ラベルは出力値である.
    以下がコードです.
    features = [[155, "rough"], [180, "rough"], [135, "smooth"], [110, "smooth"]] 
    labels = ["orange", "orange", "apple", "apple"]
    
    次に、Scikit Learningは数値的な機能を必要とするので、ラフを0と定義し、1を滑らかにすることで文字列を整数に変換します.
    オレンジとリンゴについて、それぞれ、1と0の整数値を与えてください.
    ここに新しいコードがあります.
    features = [[155, 0], [180, 0], [135, 1], [110, 1]]  
    labels = [1, 1, 0, 0]
    

    2 .分類器の訓練


    mlでは,分類は,事例データから学習し,経験を利用して新しい観測を分類する教師付き学習手法である.
    今、我々は、新しい観測をして分類するために我々の分類器を訓練するためにサンプルデータを使用します.あなたのマシンの学習問題で使用できる分類器のいくつかの種類があります.
    この場合、単純なものを保つために、データツリーから推論規則を使用して適切な予測を学習し、決定する決定木を使用する.
    ここでは、Decendtree Tree Classifierをインポートし、プロジェクトに追加するコードです.
    classifier = tree.DecisionTreeClassifier() 
    
    クラシファイアをプロジェクトに追加した後に、学習アルゴリズムを使用してトレーニングする必要がありますさもなければ、リンゴとオレンジを区別できないかもしれません.
    学習アルゴリズムは訓練データのパターンを同定し適切な結論を与える.
    例えば、リンゴがテクスチャーの中で滑らかである傾向があると認めるかもしれませんしたがって、リンゴとして滑らかな果物を識別する傾向があるルールを開発します.
    SciKit Learningでは、トレーニングアルゴリズムはFit(それはデータの中でパターンを見つけるようにゆるく解釈することができます)と呼ばれます.
    プロジェクトに追加するコードは次のとおりです.
    classifier = classifier.fit(features, labels)  
    

    予測の作成


    分類器をいくつかのトレーニングに従わせた後の最後のステップは、それをテストし、新しい果物を分類できるかどうかを確認することです.予測関数を使用して予測を行う.
    新しい果物が滑らかで、120グラムの重さであると言いましょう.1として滑らかに表現してください.
    そして、重量があまり高くないので、それはリンゴ(0)でありそうです.
    さらに、滑らかさはリンゴの特徴である.
    MLアルゴリズムがそのような予測を行うことができるかどうかを見てみましょう.
    print (classifier.predict([[120, 1]]))
    
    動く!
    出力は私たちが期待していたものです.

    ラッピング


    プロジェクトのコード全体を示します.
    from sklearn import tree
     # Gathering training data
    # features = [[155, "rough"], [180, "rough"], [135, "smooth"], [110, "smooth"]]  # Input to classifier
    features = [[155, 0], [180, 0], [135, 1], [110, 1]]  # scikit-learn requires real-valued features
    # labels = ["orange", "orange", "apple", "apple"]  # output values
    labels = [1, 1, 0, 0]
     # Training classifier
    classifier = tree.DecisionTreeClassifier()  # using decision tree classifier
    classifier = classifier.fit(features, labels)  # Find patterns in data
     # Making predictions
    print (classifier.predict([[120, 1]]))
    # Output is 0 for apple
    
    機械学習によるプログラミングは困難ではない.アプリケーションで使用する方法をマスターするには、いくつかの重要な概念を理解する必要があります.
    したがって、あなたのスキルを高めるためには、から実用的なプロジェクトを使用することができますLiveEdu 専門家が実際の機械学習アプリケーションを変える方法を学ぶために.
    ハッピー学習機械学習!