Rによる機械学習
機械学習は現在と未来です! NetflixのレコメンデーションエンジンからGoogleの自動運転車まで、すべて機械学習です。 Rを使用した機械学習に関するこのブログは、機械学習のコアコンセプトを理解し、続いてさまざまな機械学習アルゴリズムを理解し、それらの機械学習アルゴリズムをRで実装するのに役立ちます。
「Rを使用した機械学習」に関するこのブログは、次のセクションで構成されています。
Rを使用した機械学習|エドゥレカ
機械学習を理解する
それらすべてが魚であることをどうやって知っていますか?
子供の頃、あなたは魚の写真に出くわしたかもしれません、そしてあなたは幼稚園の先生や両親からこれは魚であり、ひれ、えら、一対のようなそれに関連するいくつかの特定の特徴を持っていると言われたでしょう目、尾など。これで、脳がこれらの機能セットを備えた画像に出くわすと、脳が持っているため、自動的に魚として登録されます。 学んだ それは魚だと。
それが私たちの脳の機能ですが、機械はどうですか?同じ画像がマシンに供給された場合、マシンはどのようにしてそれを魚であると識別しますか?
これがM 機械学習 入ってくる。「魚」というタグが付いたコンピュータに魚の画像を送り続ける マシンは関連するすべての機能を学習します とともに 魚。
マシンが魚に関連するすべての機能を学習したら、新しいデータをフィードして、どれだけ学習したかを判断します。
言い換えると、 生データ/トレーニングデータ マシンに与えられるので、 学ぶ に関連するすべての機能 トレーニングデータ。 一度、学習が行われると、それは与えられます 新しいデータ/テストデータ マシンがどれだけうまく学習したかを判断します。
オーバーライドとオーバーロードの違い
このRブログによる機械学習を進めて、機械学習の種類について理解しましょう。
機械学習の種類
教師あり学習:
教師あり学習アルゴリズムは、予測を行うためのラベルを持つ既知のデータセット(トレーニングデータ)から学習します。
回帰と分類は、教師あり学習の例です。
#分類:
分類は、新しい観測値が属するカテゴリのセットを決定します。つまり、分類アルゴリズムはトレーニングデータのすべての機能とラベルを学習し、新しいデータが与えられると、学習した内容に応じて新しい観測値にラベルを割り当てる必要があります。トレーニングデータから。
この例では、最初の観測に「Man」というラベルが付けられている場合、それは正しく分類されますが、「Woman」というラベルが付けられている場合、分類は間違っています。同様に、2番目の観察では、与えられたラベルが「女性」である場合、それは正しく分類されます。そうでない場合、分類は間違っています。
#回帰:
回帰は、ある変数が別の変数にどのように影響するかを判断するのに役立つ教師あり学習アルゴリズムです。
ここで、「living_area」は独立変数であり、「price」は従属変数です。つまり、「living_area」に対して「price」がどのように変化するかを決定しています。
教師なし学習:
教師なし学習アルゴリズムは、ラベルのないデータから推論を引き出します。
クラスタリング 教師なし学習の例です。 「K-means」、「Hierarchical」、「Fuzzy C-Means」は、クラスタリングアルゴリズムの例です。
この例では、一連の観測値が2つのクラスターに分割されています。クラスタリングは、観測間の類似性に基づいて行われます。クラスター内の類似性は高く、クラスター間の類似性は低くなります。つまり、すべてのバス間で非常に高い類似性がありますが、バスと車の間では低い類似性があります。
強化学習:
強化学習は、機械学習アルゴリズムの一種であり、 マシン/エージェント で 環境 そのパフォーマンスを最大化するために理想的な動作を学習します。エージェントがその行動を学ぶには、単純な報酬フィードバックが必要です。これは、 補強信号 。
取りましょう パックマン 例えば。パックマンが食べ物を食べ続ける限り、ポイントを獲得しますが、モンスターに衝突するとライフを失います。したがって、パックマンは、より多くの食べ物を食べ、モンスターを避ける必要があることを学びますパフォーマンスを向上させるためです。
Rを使用した機械学習の実装:
線形回帰:
ダイヤモンドデータセットを使用して、線形回帰アルゴリズムを実装します。
データセットの説明:
データに基づいてモデルを構築する前に、データを「トレーニング」セットと「テスト」セットに分割することになっています。モデルは「トレイン」セットに基づいて構築され、その精度は「テスト」セットでチェックされます。
データを2つのセットに分割するには、「caTools」パッケージをロードする必要があります。
ライブラリ(caTools)
「caTools」パッケージは、データの分割に役立つ関数「sample.split()」を提供します。
sample.split(diamonds $ price、SplitRatio = 0.65)-> split_index
価格列からの観測値の65%には「真」のラベルが割り当てられ、残りの35%には「偽」のラベルが割り当てられています。
サブセット(diamonds、split_index == T)-> train サブセット(diamonds、split_index == F)->テスト
「真」のラベルが付いているすべての観測値は、「 電車」オブジェクト また、「false」ラベルの付いた観測値は「テスト」セットに割り当てられています。
分割が完了し、「トレーニング」セットと「テスト」セットができたので、トレーニングセットに線形回帰モデルを構築します。
「lm()」関数を使用して、「train」データに線形回帰モデルを構築します。私たちは決定しています 価格 データセットの他のすべての変数に関するひし形の。構築されたモデルは、オブジェクト「mod_regress」に保存されます。
lm(price〜。、data = train)-> mod_regress
モデルを作成したので、「テスト」セットで予測を行う必要があります。 「predict()」関数は、予測を取得するために使用されます。それは2つの議論を取ります: 構築されたモデル そしてその テストセット。 予測結果は「result_regress」オブジェクトに保存されます。
予測(mod_regress、test)-> result_regress
「cbind()」関数を使用して、「テスト」データセットの実際の価格値と予測値を単一のデータセットにバインドしましょう。新しいデータフレームは「Final_Data」に保存されます
cbind(Actual = test $ price、Predicted = result_regress)-> Final_Data
as.data.frame(Final_Data)-> Final_Data
実際の値と予測値で構成される「Final_Data」を一目で確認できます。
実際の値から予測値を引いてエラーを見つけ、このエラーを新しい列として「Final_Data」に追加しましょう。
c ++ソート配列
(Final_Data $ Actual- Final_Data $ Predicted)->エラー
cbind(Final_Data、error)-> Final_Data
予測のエラーも含む「Final_Data」を一目で確認できます。
それでは、先に進んで「 二乗平均平方根誤差」 これにより、すべての予測の集計エラーが発生します
rmse1<-sqrt(mean(Final_Data$error^2))
rmse1
先に、別のモデルを作成して、これら両方のモデルの精度を比較し、どちらが優れているかを判断できるようにします。
「train」セットに新しい線形回帰モデルを構築しますが、今回は、独立変数から「x」列と「y」列を削除します。つまり、ダイヤモンドの「価格」はすべての'x'と 'y'を除く列。
構築されたモデルは「mod_regress2」に保存されます。
lm(price〜.-y-z、data = train)-> mod_regress2
予測結果は「result_regress2」に保存されます
予測(mod_regress2、test)-> result_regress2
実際の値と予測値が組み合わされて「Final_Data2」に保存されます。
cbind(Actual = test $ price、Predicted = result_regress2)-> Final_Data2
as.data.frame(Final_Data2)-> Final_Data2
また、予測のエラーを「Final_Data2」に追加しましょう
(Final_Data2 $ Actual- Final_Data2 $ Predicted)-> error2
cbind(Final_Data2、error2)-> Final_Data2
「Final_Data2」の概要:
集計エラーを取得するための二乗平均平方根エラーの検索:
rmse2<-sqrt(mean(Final_Data2$error^2))
「rmse2」は「rmse1」よりもわずかに小さいため、2番目のモデルは最初のモデルよりもわずかに優れていることがわかります。
セレンのデータ駆動型フレームワーク
分類:
「car_purchase」データセットを使用して実装します 再帰的パーティショニング これは分類アルゴリズムです。
「caTools」パッケージの「sample.split()」関数を使用して、データを「train」セットと「test」セットに分割しましょう。
ライブラリ(caTools)
「購入済み」列の観測値の65%には「TRUE」ラベルが割り当てられ、残りには「FALSE」ラベルが割り当てられます。
sample.split(car_purchase $ Purchased、SplitRatio = 0.65)-> split_values
「TRUE」ラベルの付いたすべての観測値は「train」データに保存され、「FALSE」ラベルの付いた観測値は「test」データに割り当てられます。
サブセット(car_purchase、split_values == T)-> train_data
サブセット(car_purchase、split_values == F)-> test_data
再帰的パーティショニングアルゴリズムを構築する時間:
まず、「rpart」パッケージをロードします。
ライブラリ(rpart)
「購入済み」列は従属変数になり、他のすべての列は独立変数になります。つまり、他のすべての列に関して、その人が車を購入したかどうかを判断します。モデルは「train_data」に基づいて構築され、結果は「mod1」に保存されます。
rpart(Purchased〜。、data = train_data)-> mod1
結果をプロットしてみましょう。
plot(mod1、margin = 0.1)
text(mod1、pretty = T、cex = 0.8)
それでは、先に進んで「test_data」の結果を予測しましょう。最初の引数として構築されたrpartモデル「mod1」、2番目の引数としてテストセット「test_data」、3番目の引数として予測タイプを「クラス」として指定します。結果は「result1」オブジェクトに保存されます。
予測(mod1、test_data、type = 'クラス')-> result1
キャレットパッケージの「confusionMatrix()」関数を使用して、モデルの精度を評価しましょう。
ライブラリ(キャレット)
confusionMatrix(table(test_data $ Purchased、result1))
混同行列は、人が車を購入しなかった90の観測値のうち、79の観測値が正しく「いいえ」に分類され、11の観測値が誤って「はい」に分類されたことを示しています。同様に、実際に車を購入した50件の観測のうち、47件が正しく「はい」に分類され、3件が誤って「いいえ」に分類されました。
モデルの精度は、正しい予測を合計予測、つまり(79 + 47)/(79 + 47 + 11 + 3)で割ることによって見つけることができます。
K-Meansクラスタリング:
「iris」データセットを使用して、k-meansクラスタリングを実装します。
「種」列を削除して、「iris」データセットの最初の4列のみで構成される新しいデータセットを作成しましょう。
アイリス[1:4]-> iris_k
クラスターの数を3とします。「Kmeans()」関数は、入力データと、データがクラスター化されるクラスターの数を取得します。構文は次のとおりです。kmeans(data、k)ここで、kはクラスター中心の数です。
kmeans(iris_k、3)-> k1
クラスタリングの分析:
str(k1)
str()関数は、inss、betweensなどのさまざまなパラメーターを含むkmeansの構造を提供し、kmeansのパフォーマンスを分析して分析します。
betweenss:二乗和の間、つまりクラスター内の類似性
withinss:正方形の合計内、つまりクラスター間の類似性
totwithinss:すべてのクラスターのすべての内部の合計、つまりクラスター内の類似性の合計
優れたクラスタリングでは、最初に選択したクラスター「k」の数に応じて、「tot.withinss」の値が低くなり、「betweenss」の値が高くなります。
機械学習のエキスパートになって、新たな機会を利用する時期が来ています。これで、この「 Rによる機械学習 」ブログ。このブログが有益で実り多いものであったことを願っています。
エドゥレカは特別にキュレーションされています これは、K-Meansクラスタリング、ディシジョンツリー、ランダムフォレスト、ナイーブベイズなどの機械学習アルゴリズムの専門知識を習得するのに役立ちます。統計、時系列、テキストマイニングの概念、およびディープラーニングの概要も学習します。このコースの新しいバッチがまもなく開始されます!!