人々が機械学習について話すのを聞くと,その意味について少しだけぼんやりしているのではないでしょうか? 同僚と話すときに,いつも点頭して疲れているのではないでしょうか? 変えましょう!
このガイドは,機械学習について知りたがっているが,どうやって始めればいいのかわからない友人に向けられています. 機械学習についてウィキペディアの言葉を読み,誰も高度な説明をしてくれないと失望している人は多いと思います. この記事は,あなたが求めているものです.
この記事の目的は,簡単に理解できるもので,概要が豊富にあることを意味します. しかし,誰がそんなことを気にしますか? 読者がMLに興味を持つようにすれば,任務は完了です.
機械学習の概念では,解答の為の問題に対して,特別なプログラムコードを書く必要はありません. 遺伝アルゴリズム (generic algorithms) は,データセットからあなたに興味深い答えを導き出すことができます. 遺伝アルゴリズムでは,コードを入れないで,データを入力します.
例えば,データを異なるグループに分類する分類アルゴリズムがあります. 手書き数字を識別する分類アルゴリズムは,コードの一行も変更せずに電子メールをスパムと普通メールに分類するために使用できます. アルゴリズムは変わっていませんが,入力されたトレーニングデータが変化して,異なる分類論理を導き出します.
機械学習アルゴリズムは,多くの異なる分類問題を解決するために再利用できるブラックボックスです.
機械学習の
機械学習アルゴリズムは 2つのカテゴリーに分けられます. 監督学習 (Supervised Learning) と 無監督学習 (Unsupervised Learning) です. 区別は簡単ですが,とても重要です.
仮にあなたが不動産代理人であり,ビジネスが大きくなるにつれて,あなたは多くのインターンを雇い,あなたの助けをします. しかし,問題は,あなたが一目で家の価値を知ることができるということです. インターンは経験がないので,どのように評価するかわかりません.
インターンシップを手伝うために (おそらく休暇を過ごすために),あなたは小さなソフトウェアを書いて,あなたの地域の住宅の価値を,住宅の大きさや土地,類似の住宅の価格など,要因によって評価することを決めます.
都市で3ヶ月間行われたすべての住宅取引を記録し,それぞれの取引には,寝室の数,住宅の大きさ,土地など,多くの詳細を記録した.
この訓練データを使って,この地域の他の住宅の価値を推定するプログラムを作成します.
これは監視学習と呼ばれます.あなたは既に,それぞれの住宅の販売価格を知っています. 言い換えれば,あなたは問題の答えを知っていて,解決策の論理を逆さまに考えることができます.
ソフトウェアを書くためには,各プロパティのトレーニングデータを含むデータをあなたの機械学習アルゴリズムに入力します.アルゴリズムは,価格数字を出すためにどのような演算を使うべきかを調べます.
これは,算術の練習問題のように,算術の符号がすべて消去されている:
教師の答えから数学記号を完全に抹消した.
このテストの数学上の問題はどんな問題なのかわかりますか? 解答を右側から出すために,左側の数字列に何をするべきか知っていますか?
監視学習では,コンピュータが数字間の関係を計算するようにします. そして,この特定の問題を解くために必要な数学的な方法を知ったら,他の同じ種類の問題を解くことができます.
住宅の大きさや場所などの情報だけを知っていても,クールな模様を作ることができます. これは非監督学習と呼ばれています.
機械学習を活用して,未知のデータ (例えば価格) を予測しようとしない場合でも,面白いことをすることができます.
紙にたくさんの数字を載せて "この数字は何の意味なのかわからないけど 規則や分類とか 何とかできるかもね" と言うようなものです
まず,アルゴリズムを使ってデータから異なるセグメントを自動的に分割できます.大学近くの買い手は小さな部屋を好むが,多くの寝室を持つ家を好むと,郊外の買い手は3つの寝室を持つ家を好むと,この情報は直接あなたのマーケティングに役立ちます.
素晴らしいことをして,住宅価格の格差値,つまり他のデータと異なる値を自動的に見つけることができます. これらの格差値の不動産は高層ビルかもしれません. そして,最高のセールスマンを集中させることができます.
この記事の残りの部分では,主に監督学習について議論しますが,それは,非監督学習が役に立たない,または全く無味でないからではありません. 実際,アルゴリズムの改善により,データと正しい答えを結びつける必要がなくなり,非監督学習はますます重要になっています.
機械学習アルゴリズムには他の種類もたくさんあります. しかし,初心者にとっては理解が良いです.
住宅の価格を評価することは,本当に学習の
人間として,あなたの脳はほとんどの状況に対処し,明確な指示なしにそれらを処理する方法を学ぶことができます. あなたが不動産代理店で長い時間を過ごしている場合,あなたは不動産の適切な価格設定,最も良いマーケティング方法,どの顧客が興味を持つか,などについて,本能的な感覚を持っているでしょう. 強いAIの研究の目標は,コンピュータでこの能力を複製することができます.
しかし,現在の機械学習アルゴリズムは,非常に特定の,限られた問題だけに焦点を当てているので,それほど良くありません. この場合,おそらく,学習アルゴリズムのより適切な定義は,小さな例データに基づいて特定の問題を解く方程式を見つけることです.
不幸なことに,
もちろん,50年後にこの記事を読むと,我々は強力なAIアルゴリズムを作り出し,この文章は古物のように見えるでしょう.未来の人類,あなたはまだ読んでない,あなたの機械の召使いにサンドイッチを作らせてください.
プログラミングをしましょう!
この例では,住宅の価格を評価する手順について,どのように書こうとしているのでしょうか? 下に行く前に考えてください.
機械学習について何も知らない人は,おそらく,住宅価格を評価するための基本的なルールをいくつか書こうとします.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# In my area, the average house costs $200 per sqft
price_per_sqft = 200
if neighborhood == "hipsterton":
# but some areas cost a bit more
price_per_sqft = 400
elif neighborhood == "skid row":
# and some areas cost less
price_per_sqft = 100
# start with a base price estimate based on how big the place is
price = price_per_sqft * sqft
# now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price — 20000
else:
# places with more bedrooms are usually
# more valuable
price = price + (num_of_bedrooms * 1000)
return price
このように何時間も忙しすぎると,少しでも成果が出るかもしれませんが,あなたのプログラムは決して完璧ではありませんし,価格が変動すると維持するのが難しいのです.
コンピュータが上記の関数の機能を実行する方法を見つけることができたら,もっと良いのではないでしょうか. 返した値が正しい限り,関数が何をしているのか,誰が気にしますか?
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <computer, plz do some math for me>
return price
この問題を考える一つの方法は,住宅価格を美味しい
この方法では,最初のプログラム (すべて if else 文で狂っている) を以下のように簡略化できます.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * .841231951398213
# and a big pinch of that
price += sqft * 1231.1231231
# maybe a handful of this
price += neighborhood * 2.3242341421
# and finally, just a little extra salt for good measure
price += 201.23432095
return price
大文字で表示された不思議な数字の
適正な体重を決める
ステップ1:
まず,各重量を1.0に設定します.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * 1.0
# and a big pinch of that
price += sqft * 1.0
# maybe a handful of this
price += neighborhood * 1.0
# and finally, just a little extra salt for good measure
price += 1.0
return price
ステップ2
価格の差をチェックする関数計算に1つの不動産を入れます.
住宅価格を予測するためにあなたのプログラムを使います.
例えば,上記の表で最初の不動産の実際の取引額は25万ドルで,あなたの関数評価は178,000ドルで,あなたは72,000ドルを下回ります.
次に,あなたのデータセット内の各セットの不動産評価の偏差値の平方根を求和します. データベースには500件の不動産取引があり,評価の偏差値の平方根の合計は86,123,373ドルです. これは,あなたの関数の現在の
合計を500で割ると,各不動産の評価の偏差平均値になります. この平均誤差値を,あなたの関数のコストと呼びましょう.
もしこのコストを0にするような重さを調整できれば,あなたの関数は完璧です. それは,入力されたデータに基づいて,あなたのプログラムがすべての不動産取引の評価をまったく異なるものにするということです.
ステップ3
ステップ2を繰り返し,可能な重量値の組み合わせをすべて試してください. どの組み合わせがコストを0に近づけるか,それはあなたが使用するものです.
思考が時間を乱す
簡単なことですよね? あなたが今やったことを考えてみてください. あなたはデータを得て,それを3つの一般的な簡単なステップで入力し,最終的にあなたの地域の住宅を評価できる関数を得ます. 住宅価格ネットワーク,注意してください! しかし,以下のような事実があなたを混乱させるかもしれません.
1. 過去40年の研究で,多くの分野 (言語学/翻訳学など) で,この一般的な"動的データパック"のような学習アルゴリズムは,現実の人間の明確なルールを必要とする方法よりも優れていることが示されています.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
狂ってるわよね?
ステップ3の
もちろん,最も良い組み合わせを見つけるために,可能なすべての重量値を試すことは不可能です. それは長い時間がかかるでしょう. 試す数字は無限かもしれません. この問題を回避するために,数学者たちは,多くの巧妙な方法を使って,あまり努力せずに,良い重量値を素早く見つけることができます. まず,簡単な方程式を書いて 2 番目のステップを表します.
これはあなたのコスト関数です.
次に,同じ方程式を機械学習の数学用語で書き換えましょう (今は無視できます)
θ は現在の重み値を表す. J ((θ) は
この式は,現在の重み値に対する偏差の大きさを表します.
寝室の数と面積の全ての可能な重み値をグラフで表示すると,次の図のようなグラフが得られます.
コスト関数のグラフはボウルのようなものです.縦軸はコストを表します.
グラフの青い最下点は 最低コストの場所です. つまり,私たちのプログラムは最小偏差です. 一番高い点は 最大偏差です. ですから,もし私たちがグラフの最下位に導いてくれる重量値のセットを見つけることができれば,私たちは答えを見つけました!
したがって,私たちは重量値を調整するだけで,グラフ上の最低点に向かって下り坂を走ることができます. 重量に対する微妙な調整が常に私たちを最低点に向かって移動させていれば,最終的に私たちは重量値をあまり試さずにそこにたどり着くことができます.
微積分を覚えてるなら,関数について調べると,関数の傾きがどの点にあるか分かります. 言い換えれば,図上の点に対して,その道が傾きであることを教えてくれます.
だから,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし,もし.
この方法により,最適な重量を特定する方法は,量梯度下降と呼ばれるもので,その高度を概説しています.詳細を理解したい場合は,恐れずに,さらに深く進みます.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/ほら ほら
機械学習アルゴリズムのライブラリを使って実用的な問題を解くとき,すべて準備ができています. しかし,具体的な詳細を理解することは常に役立ちます.
青写真の画像は,写真の写真です.
私が上記で説明した3つのステップのアルゴリズムは,多線性回帰と呼ばれる. あなたの推定方程式は,すべての住宅価格データポイントに適合する直線を求めています. そして,あなたは,この方程式を使用して,あなたの直線上の価格が発生する可能性のある位置に基づいて,未知の住宅の価格を推定します. この考えは強力で,実際の
しかし,私が示した方法がシンプルな場合でも有効かもしれないし,すべての場合でも有効ではない. その理由の一つは,住宅価格が常に連続した直線に沿って進むとは限らないからです.
しかし,幸いにも,この状況に対処する方法はたくさんあります.非線形データについては,他の多くのタイプの機械学習アルゴリズムが処理できます (例えば,神経ネットワークや核ベクトルマシンなど).線形回帰をより柔軟に利用し,より複雑な線形で調整する方法を考えることもたくさんあります.すべての状況において,最も優位性重量を求めるという基本的な考えは依然として有効です.
また,私は過度に適合する概念を無視しています. 簡単に重み値のセットに遭遇することが容易です. それはあなたの原始データセットの住宅価格を完璧に予測できますが,原始データセット以外の新しい住宅を予測することはできません. 解決法もたくさんあります (例:正規化やクロス検証データセットの使用など). この問題を解決する方法を学ぶことは,機械学習を順調に適用するために重要です.
つまり,基本的な概念は非常にシンプルで,機械学習を活用して有用な結果を得るには,いくつかの技法や経験が必要です.しかし,これはすべての開発者が学ぶことができる技法です.
機械学習技術が難しい問題 (手書き認識など) に簡単に応用できると理解すると,十分なデータがあれば,機械学習でどんな問題も解決できると感じる.データ入力だけで,コンピュータが演算法のように適切な式を見つけることがわかります.
しかし,機械学習は,あなたが持っているデータで実際に解決できる問題に対してのみ適用されることを覚えておくことが重要です.
例えば,もしあなたが各家の盆栽の数に基づいて住宅価格を予測するモデルを作れば,それは決して成功しません. 家の盆栽の数と住宅価格には何の関係もありません. だから,コンピュータは,どんなに努力しても,その関係について推論することはできません.
リアルな関係をモデル化するだけです.
私は,現在の機械学習の最大の問題は,それが主に学術界や商業研究機関で活動していることだと思います. 専門家の代わりに,一般的な知識を得たいと思っている人のために,簡単な学習資料はほとんどありません. しかし,これは日々改善しています.
Courseraのアンドリュー・NG教授の無料機械学習コースは,とても良いものです.このコースは,コンピュータ科学の学位を持つすべての人や数学の覚えがある人にとって,非常にお勧めです.
また,SciKit-Learnをダウンロードしてインストールして,何千もの機械学習アルゴリズムをテストすることができます. これは pythonのフレームワークで,すべての標準アルゴリズムのブラックボックスバージョンがあります.
Python 開発者からの転送
オクルーオクアンこの例は 教授が新しい授業を始めるたびに 繰り返します
列車なぜ2mになったのか? なぜ2mになったのか?