無料の Python 機械学習コース パート 2: 多重線形回帰

無料の Python 機械学習コース パート 2: 多重線形回帰

Python で任意の数の変数に対する多重線形回帰をゼロから開発する方法を学びます。

線形回帰はおそらく最も単純な機械学習アルゴリズムです。シンプルな数式を使用しているため、初心者には非常に便利です。したがって、機械学習の概念を学ぶのに非常に役立ちます。この記事では、多重線形回帰を段階的に説明してみたいと思います。

[[358868]]

概念と公式

線形回帰では、学校で習った簡単な式を使用します。

Y = C + AX

念のため、Y は出力または従属変数、X は入力または独立変数、A は傾き、C は切片です。

線形回帰の場合、同じ式に対して次の表記法に従います。


独立変数が複数ある場合、線形回帰の式は次のようになります。


ここで、「h」は仮説と呼ばれます。これは予測の出力変数です。 Theta0 はバイアス項であり、他のすべての theta 値は係数です。最初はランダムに開始され、その後アルゴリズムを使用して最適化されるため、この式は従属変数を正確に予測できます。

コスト関数と勾配降下法

シータ値が最初から初期化されている場合、数式は従属変数を予測するようにトレーニングされません。この仮定は、元の出力変数「Y」とはかけ離れています。すべてのトレーニング データの累積距離を推定する式は次のとおりです。


これをコスト関数と呼びます。ご存知のように、y (元の出力) を仮説 (予測された出力) から減算し、それを二乗して負の数を取り除き、その合計を 2 倍の m で割ります。ここで、mはトレーニングデータの数です。コスト関数は、元の出力と予測された出力の差を示すものとして考えることができます。機械学習アルゴリズムの考え方は、元の出力と予測出力の差が小さくなるようにコスト関数を最小化することです。これを行うには、theta の値を最適化する必要があります。

これが theta の値を更新する方法です。コスト関数を各シータ値に関して部分的に微分し、その値を既存のシータ値から減算します。


ここで、アルファは学習率であり、定数です。すべてのシータ値に対して同じ式を示したわけではありません。しかし、これはすべてのシータ値に対して同じ式です。微分すると、式は次のようになります。


これを勾配降下法と呼びます。

アルゴリズムを段階的に実装する

私が使用するデータセットは、Andre Ng の Coursera 機械学習コースから取得したものです。このページの下部にリンクを貼っておきます。データセットをダウンロードして、このチュートリアルで練習してみてください。初めての場合は、データセットの読み取りを練習することをお勧めします。それが理解できる唯一の方法です。

このデータセットには変数が 2 つだけあります。しかし、私は任意の数の変数に対して機能するアルゴリズムを開発しました。同じアルゴリズムを 10 個の変数または 20 個の変数に使用しても、機能するはずです。 Python では Numpy と Pandas のライブラリを使用します。これらの豊富な Python ライブラリにより、機械学習アルゴリズムが簡単になります。パッケージとデータセットをインポートします。

  1. pandasをpdとしてインポートする
  2. numpyをnpとしてインポートする
  3.  
  4. df = pd .read_csv('ex1data2.txt',ヘッダー=なし)
  5. df.head()

(1)部分項に列を追加する。 1 が選択される理由は、値を任意の値で乗算しても、値は変化しないからです。

  1. df = pd .concat([pd.Series(1,インデックス= df .index,名前= '00' ), df],= 1 )
  2. df.head()

(2)入力変数または独立変数Xと出力変数または従属変数yを定義します。このデータセットでは、列 0 と 1 が入力変数であり、列 2 が出力変数です。

  1. X = df .drop(列数= 2 )
  2. y = df .iloc[:, 3]

(3)各列をその列の最大値で割って入力変数を標準化する。こうすることで、各列の値は 0 から 1 の間になります。この手順は必須ではありません。しかし、これによりアルゴリズムはより早く最適値に到達できるようになります。また、データセットに注目すると、列 0 の要素は列 1 の要素に比べて大きすぎることがわかります。データセットを正規化すると、最初の列がアルゴリズムを支配するのを防ぐことができます。

  1. iが範囲(1, len(X.columns))内にある場合:
  2. X[i-1] = X[i-1]/np.max(X[i-1])
  3. X.head()

(4)シータ値を初期化する。ゼロに初期化します。ただし、他の番号でも問題ありません。

  1. シータ= np .array([0]*len(X.columns))
  2. #出力: 配列([0, 0, 0])

(5)上式でmで表される訓練データの数を計算する。

  1. m =長さ(自由度)

(6)仮説関数を定義する

  1. def hypothesis(theta, X):
  2. theta*Xを返す

(7)上記のコスト関数式を用いてコスト関数を定義する

  1. def computeCost(X, y, theta):
  2. y1 =仮説(theta, X)
  3. y1 = np .sum(y1,= 1 )
  4. sum(np.sqrt((y1-y)**2))/(2*47) を返します。

(8)勾配降下関数を記述してください。この関数は、X、y、θ、学習率 (数式内のアルファ)、エポック (または反復) を入力として受け取ります。コスト関数が最小値に達するまで、theta を更新し続ける必要があります。

  1. 定義gradientDescent(X, y, theta, alpha, i):
  2. J = [] #各反復におけるコスト関数
  3. 0 = 0です 
  4. 一方、k <  私:          
  5. y1 =仮説(theta, X)
  6. y1 = np .sum(y1,= 1 )
  7. cが範囲(0, len(X.columns))内にある場合:
  8. θ[c] = θ[c] - アルファ*(sum((y1-y)*X.iloc[:,c])/len(X))
  9. j =コスト計算(X, y, θ)
  10. J.append(j)
  11. 1 + = 1
  12. J、j、thetaを返す

(9)勾配降下関数を使用して、最終コスト、各反復のコストのリスト、および最適化されたパラメータθを取得します。アルファを0.05に選択しました。ただし、0.1、0.01、0.03、0.3 などの他の値を試して、何が起こるかを確認することもできます。これを 10000 回繰り返して実行しました。違いを確認するには、反復回数を増やしたり減らしたりしてみてください。

  1. J, j, theta = gradientDescent (X, y, theta, 0.05, 10000)

(10)最適化されたシータを使用して出力を予測する

  1. y_hat =仮説(theta, X) y_hat = np.sum (y_hat,= 1 )

(11) 元のyと予測出力y_hatをプロットする

  1. %matplotlib インライン
  2. matplotlib.pyplot を plt としてインポートします。
  3. plt.figure()
  4. plt.scatter( x =リスト(範囲(0, 47)), y y = y,= 'blue' )
  5. plt.scatter( x =リスト(範囲(0, 47))、 y = y_hat = 'black' )
  6. plt.show()

いくつかの出力ポイントは予測出力とほぼ重なります。いくつかは近いですが、重複していません。

(12)各反復のコストをプロットして動作を確認する

  1. plt.figure()
  2. plt.scatter( x =リスト(範囲(0, 10000)), y = J )
  3. plt.show()

反復ごとにコストは減少します。これはアルゴリズムがうまく機能していることを示しています。

これが役に立ち、自分で試してみることができれば幸いです。機械学習の概念を学ぶために、この章を読みながらデータセットをダウンロードし、すべてのコードを自分で実行してみることをお勧めします。データセットへのリンクは次のとおりです。

https://github.com/rashida048/Machine-Learning-With-Python/blob/master/ex1data2.txt

<<:  百度CTO王海鋒氏:オープンソースは技術革新と産業発展の原動力である

>>:  米軍はU2に人工知能副操縦士を装備した。世界で最も操縦が難しい航空機は将来ドローンになるかもしれない

ブログ    

推薦する

0からNまで、ハンワンテクノロジーが再び人工知能のトレンドに火をつける

本日、「0からNへ・原始開拓」をテーマにした2021年漢王科技秋季新製品発表会がオンラインで開催され...

ベクトルデータベースは AI をどのように改善するのでしょうか?

翻訳者 |ブガッティレビュー | Chonglou事前トレーニング済みのAIモデルがすぐに利用できる...

Microsoft は、全二重音声インタラクションにおいて画期的な進歩を達成しました。ロボットは本当に「人間」になる

マイクロソフト(アジア)インターネットエンジニアリングアカデミーは、新世代の音声インタラクション技術...

TensorFlow と PyTorch: ディープラーニングに最適なフレームワークはどれですか?

この記事を読んでいるということは、おそらくすでにディープラーニングの旅を始めているということでしょう...

自然災害はサイバーセキュリティに影響を与える:異常気象や停電に対抗するにはAIが必要

10月28日、サンフランシスコのニュース予報では、29日の強風により再び停電が発生するだろうと報じら...

マイクロソフト、AIツール「コパイロット」があなたの仕事を奪うことはないと改めて主張

Responsible AI チームを発表した際、Microsoft の幹部は、Copilot は仕...

...

自然言語処理の究極の方向性: 自然言語処理におけるディープラーニングの 5 つの利点

[[206924]]自然言語処理の分野では、ディープラーニングによって、より多くのデータが必要でも言...

人民日報:アルゴリズム推奨技術標準の健全な発展を促進

規制基準の強化は、アルゴリズム推奨技術の標準化と健全な発展に根本的に利益をもたらすだろう。近年、科学...

Google検索アルゴリズムの変更:暗号化されたウェブページの重み付けが向上

つまり、新しい Google 検索アルゴリズムでは、「HTTPS」(Hypertext Transf...

人工知能の終焉は人工性か?

先月外出した時、交差点の交通警察や補助警察の数が大幅に増えていることに気づきました。疑問に思わずには...

2019年にロボット競争は減速するでしょうか?

[[253005]] 「中国製造2025」の実施に伴い、ロボット産業は社会への参入を加速し始めてい...

目の反射神経が 3D の世界を開き、ブラック ミラーを実現します。メリーランド州出身の中国人による新作がSFファンを熱狂させる

「唯一の真の発見の旅は、未知の土地を訪れることではなく、他人の目を通して宇宙を見ることだ。」 - マ...

機械翻訳: Google 翻訳がほぼすべての言語を翻訳できる仕組み

[[345484]]誰もが Google 翻訳をよく知っているはずですが、ほぼすべての既知の言語を私...

人工知能の今後5年間で世界が注目する10人

[[251996]]十分に大きな技術的放射効果により、人工知能は世界経済の発展において主導的な地位に...