無料の Python 機械学習コース パート 3: 多項式回帰

無料の Python 機械学習コース パート 3: 多項式回帰

多項式回帰は線形回帰の改良版です。線形回帰を知っていれば、簡単に理解できるでしょう。そうでない場合は、この記事で数式を説明します。他にも高度でより効果的な機械学習アルゴリズムがあります。ただし、線形ベースの回帰手法を学ぶことは良い考えです。シンプルで高速であり、よく知られた公式を使用しているためです。ただし、複雑なデータセットではうまく機能しない可能性があります。

[[359167]]

多項式回帰式

線形回帰は、入力変数と出力変数の間に線形相関がある場合にのみ適切に機能します。前述したように、多項式回帰は線形回帰に基づいて構築されます。線形回帰の基礎が必要な場合は、「線形回帰」をご覧ください。

Python での線形回帰アルゴリズム

線形回帰の概念を学び、Pythonで完全な線形回帰アルゴリズムをゼロから開発します。

多項式回帰は、関係が線形でない場合でも、入力特徴と出力変数の関係を見つけるのに適しています。線形回帰と同じ式を使用します。

Y = BX + C

私たちは皆、学校でこの公式を学んだはずです。線形回帰の場合、次の表記法を使用します。


ここでは、データセットから X と Y を取得します。 X は入力機能であり、Y は出力変数です。シータ値はランダムに初期化されます。

多項式回帰の場合、式は次のようになります。


ここでさらに用語を追加してみましょう。同じ入力関数を使用し、異なる指数を取得して、より多くの関数を作成します。こうすることで、アルゴリズムがデータをよりよく理解できるようになります。

パワーは 2、3、または 4 である必要はありません。 1/2、1/3、1/4 にすることもできます。式は次のようになります。


コスト関数と勾配降下法

コスト関数は、予測された仮説が値からどれだけ離れているかを示します。式は次のとおりです。


この方程式は複雑に見えるかもしれません。簡単な計算をしています。まず、仮説が元の出力変数から減算されます。二乗すると負の値は除去されます。この値は、トレーニング例の数の 2 倍で割ります。

勾配降下法とは何ですか? ランダムに初期化されたシータ値を微調整するのに役立ちます。ここでは微積分については触れません。各θに対するコスト関数の偏微分を取ると、次の式が得られます。


ここで、アルファは学習率です。アルファの値を選択します。

多項式回帰の Python 実装

ここでは、多項式回帰のステップバイステップの実装を示します。

(1)この例では、職位ごとの給与データを提供する単純なダミーデータセットを使用します。データセットをインポートします。

  1. pandasをpdとしてインポートする
  2. numpyをnpとしてインポートする
  3. df = pd .read_csv('ポジション給与.csv')
  4. df.head()

(2)θ0の偏差列を追加します。偏差列には 1 のみが含まれます。 1 に数字を掛けても、数字は変化しないからです。

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

(3)「ポジション」の列を削除します。 Position 列には文字列が含まれており、アルゴリズムは文字列を理解できないためです。役職を表す「レベル」列があります。

  1. df df = df.drop( columns = '位置' )

(4)入力変数Xと出力変数yを定義します。この例では、「Level」が入力機能であり、「Salary」が出力変数です。各レベルの給与を予測したいと考えています。

  1. y = df ['給与'] X = df.drop ( columns = '給与' )
  2. X.head()

(5)「レベル」列のインデックスに基づいて「レベル1」列と「レベル2」列を作成します。

  1. X['レベル1'] = X['レベル']**2
  2. X['レベル2'] = X['レベル']**3
  3. X.head()

(6)次に、データを正規化します。各列をその列の最大値で割ります。このようにして、各列の値が 0 から 1 の範囲で取得されます。アルゴリズムは正規化なしでも機能するはずです。しかし、これにより収束が早まります。同様に、データ セットの長さである m の値を計算します。

  1. m =長さ(X)
  2. X X = X/X.max()

(7)仮説関数を定義する。これは、X と theta を使用して 'y' を予測します。

  1. def hypothesis(X, theta):
  2. y1 =シータ*X
  3. np.sum(y1,= 1 )を返します。

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

  1. defコスト(X, y, theta):
  2. y1 =仮説(X, θ)
  3. sum(np.sqrt((y1-y)**2))/(2*m) を返します。

(9)勾配降下関数を記述してください。最適なコストが見つかるまで、シータ値を更新し続けます。各反復ごとに、将来の分析のためのコストを計算します。

  1. def gradientDescent(X, y, theta, alpha, epoch):
  2. J =[]
  3. 0 = 0です 
  4. 一方、k <  エポック:  
  5. y1 =仮説(X, θ)
  6. cが範囲(0, len(X.columns))内にある場合:
  7. θ[c] = θ[c] - アルファ*合計((y1-y)* X.iloc[:, c])/m
  8. j =コスト(X, y, theta)
  9. J.append(j)
  10. 1 + = 1
  11. J, θを返す

(10)すべての関数が定義されている。次に、theta を初期化します。配列をゼロで初期化しています。他の任意のランダム値を使用することもできます。アルファを 0.05 に選択し、シータ値を 700 エポック繰り返します。

  1. シータ= np .array([0.0]*len(X.columns))
  2. J, theta = gradientDescent (X, y, theta, 0.05, 700)

(11)また、最終的なシータ値と各反復のコストも得る。この最終シータを使用して給与予測を見つけましょう。

  1. y_hat =仮説(X, theta)

(12)ここで、当初の給与と予想給与を水準に対してプロットします。

  1. %matplotlib インライン
  2. matplotlib.pyplot を plt としてインポートします。
  3. plt.figure()
  4. plt.scatter( x = X ['レベル'], y y = y)
  5. plt.scatter( x = X ['レベル'], y = y_hat )
  6. plt.show()

当社の予測は給与動向と完全に一致するわけではありませんが、近いものとなっています。線形回帰では直線しか返せません。しかし、多項式回帰では、このような曲線を得ることができます。線がきれいな曲線でない場合は、多項式回帰によってさらに複雑な傾向を学習することもできます。

(13)勾配降下関数の各エポックで計算したコストをプロットしてみましょう。

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

コストは最初は急激に下がり、その後は緩やかに下がります。優れた機械学習アルゴリズムでは、収束するまでコストは減少し続けるはずです。さまざまなエポックとさまざまな学習率 (アルファ) を自由に試してみてください。

  • データセットはこちらです: salary_data https://github.com/rashida048/Machine-Learning-With-Python/blob/master/position_salaries.csv
  • 完全な動作コードを取得するには、次のリンクをクリックしてください: 多項式回帰 https://github.com/rashida048/Machine-Learning-With-Python/blob/master/polynomial%20regression.ipynb

<<:  フロントエンド: JavaScript でのバイナリ ツリー アルゴリズムの実装

>>:  2021 年のファッションラグジュアリーの美的パラダイムとは何でしょうか?答え: テクノロジー

ブログ    
ブログ    
ブログ    

推薦する

変化する生活: テクノロジーと私たちの未来

私たちがテクノロジーによってますます、そして不可逆的に動かされている世界に生きていることは疑いの余地...

...

...

純粋なテキスト モデルは「視覚的な」表現をトレーニングします。 MITの最新研究:言語モデルはコードで絵を描くことができる

「本を読む」ことしかできない大規模な言語モデルは、現実世界の視覚的認識を備えているのでしょうか?文字...

騒ぎの裏で、2020年はケータリングロボットにとって楽な年になるだろうか?

最近、ロボットに特化したレストランが広州に正式にオープンしました。客の出迎えから調理まで、一連の作業...

いくつかの特徴選択方法を比較すると、どれが優れているでしょうか?

[[403820]]この記事はWeChat公式アカウント「DATA STUDIO」から転載したもの...

インテル、IoTとエッジ向け第10世代プロセッサーを発表

Intel は最近、第 10 世代 Core プロセッサが、スループット、LGA ソケットのスケーラ...

人工知能の道のりは長い

「人工知能」は最近、特に資本市場で非常に人気があります。実は、これはすべて予想されたことです。物語を...

金融業界のデータ管理はどこへ向かうのでしょうか?

近年、インターネット金融の波は伝統的な金融業界に課題をもたらしています。同時に、伝統的な金融企業の情...

ビッグデータの発展は、ソフトウェアエンジニアの漸進的な衰退とアルゴリズムエンジニアの台頭を伴うことになる。

[[190402]]ビッグデータは人類の歴史のどの時代にも存在していましたが、テクノロジーが一定の...

...

Redis Clusterクラスタ内のデータ分散アルゴリズムについてお話しましょう

最近、Redis Cluster に注目していますが、これにはデータ分散の問題が関係しています。Re...

パラメータは最大2兆個、GPT-4をはるかに超える!アマゾンの新型オリンパス大型モデルが公開、近日発表予定

大きなモデルの波から遠ざかっていたように見えるAmazonが、ついに最新の進捗状況を発表することにな...

...