Python で線形回帰機械学習モデルを作成する方法は? 「初心者ガイド」

Python で線形回帰機械学習モデルを作成する方法は? 「初心者ガイド」

線形回帰とロジスティック回帰は、現在人気のある 2 つの機械学習モデルです。

[[331887]]

この記事では、scikit-learn ライブラリを使用して、Python で最初の線形およびロジスティック回帰機械学習モデルを作成、トレーニング、テストする方法を説明します。この記事はほとんどの初心者に適しています。

線形回帰機械学習モデル

1. 使用するデータセット

線形回帰はこの記事で学ぶ最初の機械学習モデルなので、この記事では人工的に作成されたデータセットを使用します。これにより、機械学習の概念の学習と理解に集中でき、データのクリーニングや処理に不必要な時間を費やすことがなくなります。

具体的には、住宅データのデータセットを使用して住宅価格の予測を試みます。モデルを構築する前に、まず必要なライブラリをインポートする必要があります。

2. 必要なPythonライブラリ

最初にインポートする必要があるライブラリは pandas です。これは「パネル データ」を組み合わせたもので、表形式のデータを操作するための一般的な Python ライブラリです。

通常、ライブラリの名前には pd を使用します。次のステートメントを使用して Pandas をインポートできます。

  1. pandasをpdとしてインポートする

次に、非常によく使用される数値計算ライブラリである NumPy をインポートする必要があります。 Numpy は、Numpy 配列データ構造と、非常に便利な reset、arange、append でよく知られています。

通常、Numpy のエイリアスとして np も使用します。次のステートメントを使用してインポートできます。

  1. numpyをnpとしてインポートする

次に、Python 用の一般的なデータ視覚化ライブラリである matplotlib をインポートする必要があります。

matplotlib は通常、エイリアス plt でインポートされます。次のステートメントを使用してインポートできます。

  1. matplotlib.pyplot をpltとしてインポートします。
  2.  
  3. %matplotlib インライン

%matplotlib インライン ステートメントを使用すると、matplotlib 視覚化を Jupyter Notebook に直接埋め込むことができ、アクセスと解釈が容易になります。

最後に、matplotlib を使用して美しいデータ視覚化を簡単に作成できる別の Python データ視覚化ライブラリである seaborn もインポートします。

次のステートメントを使用してインポートできます。

  1. Seaborn をSNSとしてインポートする

要約すると、この記事に必要なライブラリのインポートは次のとおりです。

  1. pandasをpdとしてインポートする
  2.  
  3. numpyをnpとしてインポートする
  4.  
  5. matplotlib.pyplot をpltとしてインポートします。
  6.  
  7. %matplotlib インライン
  8.  
  9. Seaborn をSNSとしてインポートする

データセットのインポート

前述したように、住宅情報データセットを使用します。以下の URL リンクに、.csv ファイル データセットがあります。

  1. https://nickmccullum.com/files/Housing_Data.csv

データセットを Jupyter Notebook にインポートするには、まず URL をコピーしてブラウザに貼り付けてファイルをダウンロードします。次に、ファイルを Jupyter Notebook ディレクトリに移動します。

これが完了すると、次の Python ステートメントで住宅データセットを Jupyter Notebook にインポートできます。

  1. raw_data = pd.read_csv( 'Housing_Data.csv' )

このデータセットには、次のような多くの機能があります。

  • 住宅地の平均販売価格
  • エリア内の平均部屋数
  • 家が売られた価格
  • 住所

このデータはランダムに生成されるため、意味をなさない小さな違いがいくつか見られます (整数であるべき数字の後に小数点以下の桁数が多いなど)。

データセットを理解する

データセットが raw_data 変数にインポートされたので、info メソッドを使用してデータセットに関する高レベルの情報を取得できます。具体的には、raw_data.info() を実行すると次の結果が生成されます。

  1. <クラス'pandas.core.frame.DataFrame' >
  2.  
  3. RangeIndex: 5000 エントリ、0 4999
  4.  
  5. データ列(合計 7 列):
  6.  
  7. 平均地域収入 5000 非null float64
  8.  
  9. 平均面積 住宅築年数 5000 非null float64
  10.  
  11. 平均面積部屋5000 非null float64
  12.  
  13. 平均面積 寝室数5000null float64
  14.  
  15. エリア人口 5000 非null float64
  16.  
  17. 価格 5000 非null float64
  18.  
  19. アドレス 5000 非nullオブジェクト
  20.  
  21. データ型: float64(6)、object(1)
  22.  
  23. メモリ使用量: 273.6 KB 以上

もう一つの便利なアプローチは、データを生成することです。これには seaborn メソッド pairplot を使用し、DataFrame 全体を引数として渡すことができます。これは次のコード行で示されます。

  1. sns.pairplot(生データ)

このステートメントの出力は次のようになります。


次に、線形回帰モデルの構築を始めましょう。

機械学習線形回帰モデルの構築

最初に行う必要があるのは、データを x 配列 (予測に使用するデータを含む) と y 配列 (予測の対象となるデータを含む) に分割することです。

まず、どの列を含めるかを決定する必要があります。raw_data.columns 出力のリストを使用して、DataFrame 列のリストを生成できます。

  1. インデックス([ 「平均エリア収入」 「平均エリア築年数」 「平均エリア部屋数」
  2.  
  3. [平均面積 寝室数] [エリア人口] [価格] [住所]
  4.  
  5. dtype = 'オブジェクト' )

価格 (予測したい変数であるため) と住所 (テキストのみを含むため) を除くすべての変数に x 配列を使用します。

x 配列を作成し、それを x という名前の変数に割り当ててみましょう。

  1. x = raw_data[[ '平均エリア収入' , '平均エリア築年数' , '平均エリア部屋数' ,
  2.  
  3. 「平均エリア寝室数」 「エリア人口」 ]]

次に、コードの y 配列を作成し、それを y という名前の変数に割り当てます。

  1. y = raw_data[ '価格' ]

データセットを x と x 配列 (それぞれモデルの入力値) と y 配列 (それぞれモデルの出力値) に分割できました。次のセクションでは、データセットをトレーニング データとテスト データにさらに分割する方法を学習します。

データセットをトレーニングデータとテストデータに分割する

scikit-learn を使用すると、データセットをトレーニング データとテスト データに簡単に分割できます。これを行うには、scikit-learn の model_selection モジュールから train_test_split 関数をインポートする必要があります。

これを行うための完全なコードは次のとおりです。

  1. sklearn.model_selectionからtrain_test_split をインポートします

train_test_split データは 3 つのパラメータを受け入れます。

  • x配列
  • y配列
  • テストデータの予想サイズ

これらのパラメータを使用すると、train_test_split 関数がデータを分割します。テスト データをデータセット全体の 30% にしたい場合は、次のコードを使用できます。

  1. x_train、x_test、y_train、y_test = train_test_split(x、y、test_size = 0.3)

ここで何が起こっているのかを詳しく見ていきましょう。

train_test_split 関数は、長さ 4 の Python リストを返します。リスト内の各項目は、x_train、x_test、y_train、y_test です。次に、リストのアンパックを使用して、正しい変数名に正しい値を割り当てます。

データセットを正しく分割したので、次は線形回帰機械学習モデルを構築してトレーニングします。

モデルの構築とトレーニング

最初に行う必要があるのは、scikit learn から LinearRegression 推定器をインポートすることです。 Python ステートメントは次のとおりです。

  1. sklearn.linear_modelからLinearRegression をインポートします

次に、LinearRegression Python オブジェクトのインスタンスを作成する必要があります。これを model という変数に割り当てます。コードは次のとおりです:

  1. モデル = 線形回帰()

scikit-learn の fit メソッドを使用して、トレーニング データでこのモデルをトレーニングできます。

  1. モデルをフィット(x_train, y_train)

これでモデルのトレーニングが完了し、次のステートメントを使用してモデルの各係数を検査できるようになりました。

  1. 印刷(モデル.coef_)

出力:

  1. [2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03
  2.  
  3. [1.52251955e+01]

同様に、回帰方程式の切片を表示する方法は次のとおりです。

  1. 印刷(モデル.intercept_)

出力:

  1. -2641372.6673013503

係数を表示するより良い方法は、係数をデータ フレームに配置することです。これは次のステートメントで実行できます。

  1. pd.DataFrame(model.coef_, x.columns, columns = [ '係数' ])

この場合の出力は理解しやすくなります。


これらの係数が何を意味するのかを理解するために少し時間を取ってみましょう。係数が約 15 である地域人口変数を具体的に見てみましょう。

つまり、他のすべての変数を一定に保つと、地域の人口が 1 単位増加すると、予測変数 (この場合は価格) が 15 単位増加することになります。

言い換えれば、特定の変数の係数が大きいということは、その変数が予測しようとしている変数の値に大きな影響を与えることを意味します。同様に、値が小さいと効果はほとんどありません。

最初の機械学習線形回帰モデルを生成したので、次はそのモデルを使用してテスト データセットから予測を行います。

モデルに基づいて予測する

scikit-learn を使用すると、機械学習モデルから予測を行うことが非常に簡単になります。先ほど作成したモデル変数に対して、predict メソッドを呼び出すだけです。

予測変数は予測を行うために使用されるため、y 値を生成する x 配列引数のみを受け入れます。

以下は、predict メソッドを使用してモデルから予測を生成するために必要なコードです。

  1. 予測 = model.predict(x_test)

予測変数は、x_test に格納されている特徴の予測値を保持します。 train_test_split メソッドを使用して実際の値を y_test に保存したので、次に行う必要があるのは、予測配列の値と y_test の値を比較することです。

散布図を使用して 2 つの配列をプロットする簡単な方法を次に示します。 Matplotlib 散布図は、plt.scatter メソッドを使用して簡単に作成できます。 コードは次のとおりです:

  1. plt.scatter(y_test, 予測)

コードによって生成された散布図は次のとおりです。


ご覧のとおり、予測値はデータセット内の観測値の実際の値に非常に近いです。この散布図の完全な直線は、モデルが y 配列の値を完全に予測していることを示しています。

モデルのパフォーマンスを視覚的に評価する別の方法は、実際の y 配列値と予測された y 配列値の差である残差をプロットすることです。

これは、次のコード ステートメントを使用して簡単に実現できます。

  1. plt.hist(y_test - 予測)

以下はコード生成の視覚化です。


これは機械学習モデルの残差のヒストグラムです。

機械学習モデルの残差は正規分布しているように見えることに気付くかもしれません。これは非常に良い兆候です!

これは、データセットに基づいて予測を行うために適切なモデル タイプ (この場合は線形回帰) を選択したことを示しています。このコースの後半では、正しいモデルが使用されていることを確認する方法についてさらに詳しく説明します。

モデルのパフォーマンスをテストする

このコースの冒頭で、回帰機械学習モデルに使用される主なパフォーマンス メトリックが 3 つあることを学びました。

  • 平均絶対誤差
  • 平均二乗誤差
  • 二乗平均平方根誤差

それでは、この記事で構築したモデルの各メトリックがどのように計算されるかを見てみましょう。続行する前に、Jupyter Notebook で次のインポート ステートメントを実行することを忘れないでください。

  1. sklearnからメトリックをインポート

平均絶対誤差 (MAE)

Python の平均絶対誤差は、次のステートメントを使用して計算できます。

  1. metrics.mean_absolute_error(y_test、予測)

平均二乗誤差 (MSE)

同様に、次のステートメントを使用して Python で平均二乗誤差を計算できます。

  1. metrics.mean_squared_error(y_test, 予測)

二乗平均平方根誤差 (RMSE)

平均絶対誤差や平均二乗誤差とは異なり、scikit-learn には実際には二乗平均平方根誤差を計算するための組み込みメソッドはありません。

幸いなことに、実際にそうする必要はありません。 RMS エラーは RMS エラーの平方根にすぎないため、NumPy の sqrt メソッドを使用して簡単に計算できます。

  1. np.sqrt(metrics.mean_squared_error(y_test, 予測))

完全なコードを添付します

これは、Python 線形回帰機械学習チュートリアルのコード全体です。

  1. pandasをpdとしてインポートする
  2.  
  3. numpyをnpとしてインポートする
  4.  
  5. matplotlib.pyplot をpltとしてインポートします。
  6.  
  7. Seaborn をSNSとしてインポートする
  8.  
  9. %matplotlib インライン
  10.  
  11. raw_data = pd.read_csv( 'Housing_Data.csv' )
  12.  
  13. x = raw_data[[ '平均エリア収入' , '平均エリア築年数' , '平均エリア部屋数' ,
  14.  
  15. 「平均エリア寝室数」 「エリア人口」 ]]
  16.  
  17. y = raw_data[ '価格' ]
  18.  
  19. sklearn.model_selectionからtrain_test_split をインポートします
  20.  
  21. x_train、x_test、y_train、y_test = train_test_split(x、y、test_size = 0.3)
  22.  
  23. sklearn.linear_modelからLinearRegression をインポートします
  24.  
  25. モデル = 線形回帰()
  26.  
  27. モデルをフィットします(x_train, y_train)
  28.  
  29. 印刷(モデル.coef_)
  30.  
  31. 印刷(モデル.intercept_)
  32.  
  33. pd.DataFrame(model.coef_, x.columns, columns = [ '係数' ])
  34.  
  35. 予測 = model.predict(x_test)
  36.  
  37. # plt.scatter(y_test, 予測)
  38.  
  39. plt.hist(y_test - 予測)
  40.  
  41. sklearnからメトリックをインポート
  42.  
  43. metrics.mean_absolute_error(y_test、予測)
  44.  
  45. metrics.mean_squared_error(y_test, 予測)
  46.  
  47. np.sqrt(metrics.mean_squared_error(y_test, 予測))

<<:  11 の基本的なニューラル ネットワーク アーキテクチャの視覚的な説明

>>:  ロボットは感染症の蔓延を抑制するためにどのように役立つのでしょうか?

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

2022年秋の採用戦争:アルゴリズム職は混み合い、Java開発も後退を余儀なくされる

[[411043]]コンピュータサイエンスの卒業生にとって、アルゴリズム関連の職は基本的に「高給」と...

GoogleはAIを活用して古い地図情報を更新

Google はブログ投稿で、同社の AI がさまざまな要素を分析して、こうした更新を行うべきかどう...

...

...

...

米国労働統計局は機械学習を使用してデータコーディングを自動化しています

政府機関には常にさまざまな文書が詰まっていますが、その多くは紙の文書であり、電子文書であっても、実際...

ビッグデータが地球を救う10の方法

近年、多くの物事の成功はテクノロジーの進歩によるものと言えます。その一つは、気候変動のリスクから地球...

人工知能が VPS と共有ホスティング オプションの議論を再構築

人工知能は数え切れないほど多くの業界を前例のない形で変えています。ウェブホスティングは人工知能が関与...

「認知の輪」を解読する:AIと人間の究極の戦い

今日は週末なので、深遠な話をするふりをして話をしましょう。現在、人工知能について議論する場合、ほとん...

Baiduの王海峰氏はオープンソースのディープラーニングプラットフォームPaddlePaddleを2019年のソフトウェアエキスポに導入した。

「ディープラーニングフレームワークは、インテリジェント時代のオペレーティングシステムです。百度のP...

清華大学のFaceWall Intelligenceは、大規模なモデルを16,000以上の実際のAPIに接続し、オープンソースのToolLLMはChatGPTに近い

人工知能の分野では、大規模なモデルを使用してインテリジェントエージェントを制御することは避けられない...

「アルゴリズムとデータ構造」では、分割統治アルゴリズムの美しさを紹介します。

[[347259]]序文この共有の内容は、古典的なアルゴリズムのアイデアである分割統治です。これは...

...

Googleの人工知能研究所DeepMindがカナダで研究者を募集

2014年にグーグルが買収したロンドンを拠点とする人工知能研究所ディープマインドは、世界最高のAI研...

ダイクストラのアルゴリズムの詳細な説明

この記事では、まず単一ソース最短経路問題から始め、次にベルマン・フォード アルゴリズムについて説明し...