ホームページ  >  記事  >  バックエンド開発  >  機械学習は実際は思っているよりも簡単です_PHP チュートリアル

機械学習は実際は思っているよりも簡単です_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:39:00909ブラウズ

多くの人は、機械学習は達成不可能であり、少数の専門学者だけが理解している謎のテクノロジーであると感じています。

結局のところ、バイナリ世界で動作するマシンに現実世界を独自に理解させていることになります。あなたは彼らに考え方を教えているのです。ただし、この記事は、皆さんが想像するような、難解で複雑な数式だらけの記事ではありません。私たちが世界を理解するのに役立つすべての基本的な常識 (例: ニュートンの運動法則、完了する必要のある仕事、需要と供給の関係など) と同様に、機械学習の最良の方法と概念も簡潔かつ明確である必要があります。 。残念なことに、機械学習に関する文献の大部分は、複雑な記号、わかりにくい数式、不必要なナンセンスで満ちています。機械学習のシンプルかつ基本的な考え方を厚い壁で囲っているのはこれです。

ここで実際の例を見てみましょう。記事の最後に「好きかもしれません」というレコメンド機能を追加する必要があります。どのように実装すればよいでしょうか。

このアイデアを実装するための簡単な解決策があります:

  • 1. 現在の記事のタイトルを取得し、独立した単語に分割します (翻訳者注: 元のテキストは英語です。スペースに基づいて分割するだけで済みます。中国語の単語の分割には単語セグメンターの使用が必要です)
  • 2. 現在の記事を除くすべての記事を取得します
  • 3. 内容と現在の記事のタイトルの重複に従ってこれらの記事を並べ替えます
  1. def similar_posts(post)
  2.   title_keywords = post.title.split(' ')
  3.   Post.all.to_a.sort |post1, post2|
  4.     post1_title_intersection = post1.body.split(' ') & title_keywords
  5.     post2_title_intersection = post2.body.split(' ') & title_keywords
  6.     post2_title_intersection.length <=> post1_title_intersection.length
  7.   end[0..9]
  8. end

​ ​

この方法を使用して、ブログ投稿「サポート チームが製品品質を向上させる方法」に類似した記事を検索すると、以下の最も関連性の高い記事トップ 10 が得られました。

    実証済みのソリューションを使い始める方法
  • 顧客がどのように意思決定を行うかを理解します
  • ユーザーを満足させる初回実行インターフェースを設計する
  • デザイナーを採用する方法
  • アイコンデザインについてのディスカッション
  • 歌手ライアンへのインタビュー
  • 社内コミュニケーションを通じて顧客を積極的にサポートします
  • なぜナンバーワンであることが重要ではないのか
  • ジョシュア・ポーターへのインタビュー
  • 顧客維持、グループ分析と可視化
ご覧のとおり、ベンチマーク記事はチーム サポートを効率的に提供する方法に関するものであり、顧客グループの分析や設計の利点についての議論とは何の関係もありません。実際には、より良いアプローチをとることもできます。

ここで、真の機械学習手法を使用してこの問題を解決しようとします。 2 つのステップで進みます:

    記事を数学形式で表現します
  1. K 平均法クラスタリング アルゴリズムを使用して、上記のデータ ポイントに対してクラスター分析を実行しました。

1. 記事を数学形式で表現します

記事を数学的な形式で表示できれば、以前の記事間の類似性をプロットして、異なるクラスターを識別できます。

上の図に示すように、各記事を座標系上の座標点にマッピングすることは、次の 2 つの手順で実現できます。
  1. 各記事内のすべての単語を検索します
  2. 記事ごとに配列を作成します。配列の要素は 0 または 1 で、各記事内の配列要素の順序は同じですが、値は次のようになります。違う。

Rubyのコードは以下の通りです:

  1. @posts = Post.all
  2. @words = @posts.map do |p|
  3.   p.body.split(' ')
  4. end.flatten.uniq
  5. @vectors = @posts.map do |p|
  6.   @words.map do |w|
  7.     p.body.include?(w) ? 1 : 0
  8.   end
  9. end

@words の値が次であると仮定します:

["こんにちは","内部","内部コミュニケーション","読者","ブログ","公開"]

記事のコンテンツが「Hello Blog Post Reader」の場合、対応する配列は次のようになります:

[1,0,0,1,1,1]

もちろん、現時点では単純なツールを使用してこの 6 次元の座標点を 2 次元の座標系のように表示することはできませんが、2 点間の距離などの関連する基本概念は相互運用可能であり、より高次元に一般化することができます。問題を説明するために 2 次元の例を使用しても問題は解決します)。

2. K-means クラスタリング アルゴリズムを使用してデータ ポイントのクラスター分析を実行します

一連の記事の座標がわかったので、類似した記事のクラスターを見つけてみることができます。ここでは、非常に単純なクラスタリング アルゴリズムである K-means アルゴリズムを使用します。これは 5 つのステップに要約できます:

  1. クラスター内のオブジェクトの数を表す数値 K を設定します。
  2. すべてのデータ オブジェクトから K 個のオブジェクトを最初の K 個のクラスター中心としてランダムに選択します。
  3. すべてのオブジェクトを走査し、それ自体に最も近いクラスターに割り当てます
  4. ;
  5. クラスターの中心を更新します。つまり、各クラスター内のオブジェクトの平均を計算し、その平均をクラスターの新しい中心として使用します。
  6. 各クラスターの中心が変化しなくなるまで、手順 3 と 4 を繰り返します。
  7. 次に、これらのステップを図形式で視覚化します。まず、一連の記事座標から 2 つの点 (K=2) をランダムに選択します。

各記事をそれに最も近いクラスターに割り当てます:

各クラスター内のすべてのオブジェクトの平均座標をクラスターの新しい中心として計算します。

このようにして、最初のデータ反復が完了しました。次に、新しいクラスター センターに基づいて、記事を対応するクラスターに再割り当てします。

この時点で、各記事に対応するクラスターが見つかりました。当然のことながら、クラスタの中心が反復を続けても、クラスタの中心は変化せず、各記事に対応するクラスタも変化しません。

上記のプロセスの Ruby コードは次のとおりです:

  1. @cluster_centers = [rand_point(), rand_point()]
  2. 15.times do
  3.   @clusters = [[], []]
  4.   @posts.each do |post|
  5.     min_distance, min_point = nil, nil
  6.     @cluster_centers.each.with_index do |center, i|
  7.       if distance(center, post) < min_distance
  8.         min_distance = distance(center, post)
  9.         min_point = i
  10.       end
  11.     end
  12.     @clusters[min_point] << post
  13.   end
  14.   @cluster_centers = @clusters.map do |post|
  15.     average(posts)
  16.   end
  17. end

以下は、この方法で取得された、ブログ投稿「サポート チームが製品品質を向上させる方法」に類似した上位 10 件の記事です:

  • あなたはこれについてよく知っていますか、それとも賢いですか
  • お客様からのフィードバックの 3 原則
  • お客様から必要な情報を入手します
  • 商品の発送はまだ始まったばかりです
  • 機能拡張機能はどのようなものだと思いますか
  • ユーザーベースを知る
  • 適切なメッセージと適切なタイミングで顧客を変換します
  • お客様とのコミュニケーション
  • あなたのアプリにはメッセージプッシュの仕組みがありますか?
  • お客様とコミュニケーションを取ろうとしましたか
結果がすべてを物語っています。

このアイデアを実装するために使用したのは 40 行未満のコードとアルゴリズムの簡単な紹介だけですが、学術論文を見てみると、それがどれほど単純であるべきかは決してわかりません。以下は、K-means アルゴリズムを紹介する論文の要約です (K-means アルゴリズムを誰が提案したかはわかりませんが、「K-means」という用語が提案されたのはこれが初めてです)。

自分のアイデアを表現するために数学記号を使用するのが好きなら、学術論文が非常に役立つことは間違いありません。ただし、実際には、これらの複雑な数式を置き換えることができる、より実用的で親しみやすい高品質のリソースが存在します。

  • Wikipedia (潜在意味論的インデックス付け、クラスター分析など)
  • オープンソース機械学習ライブラリのソースコード (Scipy の K-Means、Scikit の DBSCAN など)
  • プログラマーの視点から書かれた書籍 (例: 集合知プログラミング、ハッキング機械学習)
  • カーンアカデミー

試してみてください

プロジェクト管理に推奨タグを適用するにはどうすればよいですか?カスタマー サポート ツールをどのように設計するか?あるいは、ソーシャル ネットワーク内でユーザーはどのようにグループ化されるのでしょうか?これらはすべて単純なコードと単純なアルゴリズムで実装できるため、練習する良い機会になります。では、プロジェクトで直面している問題が機械学習で解決できると思うのであれば、なぜ躊躇する必要があるでしょうか?

機械学習は実際にはあなたが思っているよりも簡単です。



元のリンク: Intercom 翻訳: Bole Online - zhinzeng
翻訳リンク: http://blog.jobbole.com/53546/


================================================= ====
PPC WeChat プラットフォームが開始されました!
WeChat で「PHPChina」を検索し、フォロー ボタンをクリックすると、PPC がプッシュする最新かつ最も専門的な業界情報が入手できます。さらに特別なコラムもあります
【PPCマイニング】: 古典的な製品や製品担当者に関するストーリーを随時お届けします。
[PPC 外国語]: 外国語翻訳記事を毎日シェアします
【PPCoder】: 毎日フォローしているユーザーからの質問に答えます

機械学習は実際は思っているよりも簡単です_PHP チュートリアル

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/735054.html技術記事多くの人は、機械学習は達成不可能であり、少数の専門学者だけが理解している謎のテクノロジーであると感じています。 結局のところ、バイナリの世界で動作するマシンに、それが何であるかを理解させていることになります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。