多くの人は、機械学習は達成不可能であり、少数の専門学者だけが理解している謎のテクノロジーであると感じています。
結局のところ、バイナリ世界で動作するマシンに現実世界を独自に理解させていることになります。あなたは彼らに考え方を教えているのです。ただし、この記事は、皆さんが想像するような、難解で複雑な数式だらけの記事ではありません。私たちが世界を理解するのに役立つすべての基本的な常識 (例: ニュートンの運動法則、完了する必要のある仕事、需要と供給の関係など) と同様に、機械学習の最良の方法と概念も簡潔かつ明確である必要があります。 。残念なことに、機械学習に関する文献の大部分は、複雑な記号、わかりにくい数式、不必要なナンセンスで満ちています。機械学習のシンプルかつ基本的な考え方を厚い壁で囲っているのはこれです。
ここで実際の例を見てみましょう。記事の最後に「好きかもしれません」というレコメンド機能を追加する必要があります。どのように実装すればよいでしょうか。
このアイデアを実装するための簡単な解決策があります:
def
similar_posts(post)
title_keywords = post.title.split(
' '
)
Post.all.to_a.sort |post1, post2|
post1_title_intersection = post1.body.split(
' '
) & title_keywords
post2_title_intersection = post2.body.split(
' '
) & title_keywords
post2_title_intersection.length <=> post1_title_intersection.length
end
[
0
..
9
]
end
この方法を使用して、ブログ投稿「サポート チームが製品品質を向上させる方法」に類似した記事を検索すると、以下の最も関連性の高い記事トップ 10 が得られました。
ここで、真の機械学習手法を使用してこの問題を解決しようとします。 2 つのステップで進みます:
1. 記事を数学形式で表現します
記事を数学的な形式で表示できれば、以前の記事間の類似性をプロットして、異なるクラスターを識別できます。
上の図に示すように、各記事を座標系上の座標点にマッピングすることは、次の 2 つの手順で実現できます。
Rubyのコードは以下の通りです:
@posts
= Post.all
@words
=
@posts
.map
do
|p|
p.body.split(
' '
)
end
.flatten.uniq
@vectors
=
@posts
.map
do
|p|
@words
.map
do
|w|
p.body.include?(w) ?
1
:
0
end
end
@words の値が次であると仮定します:
["こんにちは","内部","内部コミュニケーション","読者","ブログ","公開"]
記事のコンテンツが「Hello Blog Post Reader」の場合、対応する配列は次のようになります:
[1,0,0,1,1,1]
もちろん、現時点では単純なツールを使用してこの 6 次元の座標点を 2 次元の座標系のように表示することはできませんが、2 点間の距離などの関連する基本概念は相互運用可能であり、より高次元に一般化することができます。問題を説明するために 2 次元の例を使用しても問題は解決します)。
2. K-means クラスタリング アルゴリズムを使用してデータ ポイントのクラスター分析を実行します
一連の記事の座標がわかったので、類似した記事のクラスターを見つけてみることができます。ここでは、非常に単純なクラスタリング アルゴリズムである K-means アルゴリズムを使用します。これは 5 つのステップに要約できます:
各記事をそれに最も近いクラスターに割り当てます:
各クラスター内のすべてのオブジェクトの平均座標をクラスターの新しい中心として計算します。
このようにして、最初のデータ反復が完了しました。次に、新しいクラスター センターに基づいて、記事を対応するクラスターに再割り当てします。
この時点で、各記事に対応するクラスターが見つかりました。当然のことながら、クラスタの中心が反復を続けても、クラスタの中心は変化せず、各記事に対応するクラスタも変化しません。
上記のプロセスの Ruby コードは次のとおりです:@cluster_centers
= [rand_point(), rand_point()]
15
.times
do
@clusters
= [[], []]
@posts
.
each
do
|post|
min_distance, min_point =
nil
,
nil
@cluster_centers
.
each
.with_index
do
|center, i|
if
distance(center, post) < min_distance
min_distance = distance(center, post)
min_point = i
end
end
@clusters
[min_point] << post
end
@cluster_centers
=
@clusters
.map
do
|post|
average(posts)
end
end
以下は、この方法で取得された、ブログ投稿「サポート チームが製品品質を向上させる方法」に類似した上位 10 件の記事です:
このアイデアを実装するために使用したのは 40 行未満のコードとアルゴリズムの簡単な紹介だけですが、学術論文を見てみると、それがどれほど単純であるべきかは決してわかりません。以下は、K-means アルゴリズムを紹介する論文の要約です (K-means アルゴリズムを誰が提案したかはわかりませんが、「K-means」という用語が提案されたのはこれが初めてです)。
自分のアイデアを表現するために数学記号を使用するのが好きなら、学術論文が非常に役立つことは間違いありません。ただし、実際には、これらの複雑な数式を置き換えることができる、より実用的で親しみやすい高品質のリソースが存在します。
試してみてください
プロジェクト管理に推奨タグを適用するにはどうすればよいですか?カスタマー サポート ツールをどのように設計するか?あるいは、ソーシャル ネットワーク内でユーザーはどのようにグループ化されるのでしょうか?これらはすべて単純なコードと単純なアルゴリズムで実装できるため、練習する良い機会になります。では、プロジェクトで直面している問題が機械学習で解決できると思うのであれば、なぜ躊躇する必要があるでしょうか?
機械学習は実際にはあなたが思っているよりも簡単です。
元のリンク: Intercom 翻訳: Bole Online - zhinzeng
翻訳リンク: http://blog.jobbole.com/53546/
================================================= ====
PPC WeChat プラットフォームが開始されました!
WeChat で「PHPChina」を検索し、フォロー ボタンをクリックすると、PPC がプッシュする最新かつ最も専門的な業界情報が入手できます。さらに特別なコラムもあります
【PPCマイニング】: 古典的な製品や製品担当者に関するストーリーを随時お届けします。
[PPC 外国語]: 外国語翻訳記事を毎日シェアします
【PPCoder】: 毎日フォローしているユーザーからの質問に答えます