Help us understand the problem. What is going on with this article?

Coursera Machine Learningの課題をPythonで: ex1(線形回帰)

More than 3 years have passed since last update.

方針

オンライン学習プラットフォームCourseraで一番人気の講座、Stanford大学のMachine Learning。講師はAndrew Ng先生。授業はレクチャーとプログラミング課題からなるが、プログラミング課題に使用する言語はOctaveまたはMatlabが指定されている。

このプログラミング課題をPythonを使って粛々と実装していく。ただし、

  • オリジナルの課題はアルゴリズムの理解を助けることを目的としているため、一部の処理は機械学習のライブラリを使用せずに自らコードを書くように設計されている。これをそのままPythonで再現するのではなく、できる限りPythonにある機械学習ライブラリを使って効率よく実装したい。

という方針。

さっそくex1

最初の課題となるex1では線形回帰(Linear Regression)をやります。レストランチェーン経営において、過去に出店した街の人口とレストランの利益額が対になったデータセットをもとに、新たに出店する場合の利益額を予想するというものです。

さっそくコードはこちら。

ex1.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model

#データ読み込み
data = pd.read_csv("ex1data1.txt", header=None)

plt.scatter(data[0], data[1], marker='x', c='r')
plt.xlabel("Population of city in 10,000s")
plt.ylabel("Profit in $10,000s")

X = np.array([data[0]]).T
y = np.array(data[1])

model = linear_model.LinearRegression()
model.fit(X, y)

px = np.arange(X.min(),X.max(),.01)[:,np.newaxis]
py = model.predict(px)

plt.plot(px, py, color="blue", linewidth=3)
plt.show()

結果のプロットはこのように出力されます。
ex1.png

今回のポイント

線形回帰モデルは、scikit-learn のsklearn.linear_model.LinearRegression()クラスを使用する。まずインスタンスを作成し、model.fit(X,y)で学習を実施。学習結果である切片と傾きはそれぞれmodel.intercept_model.coef_のように取り出せる。モデルを使って新しいXの値に対して予測をするにはmodel.predict(X)とする。

numpyの1次元ベクトルについて

Matlab/Octaveと違い、Pythonでは1次元の縦ベクトルと横ベクトルが区別されない。明示的に縦ベクトルを作成するには、
np.array([[1,2,3,4,5]]).T
とするか、
np.array([1,2,3,4,5])[:,np.newaxis)]
とする。--> 参考記事

nokomitch
クオンツ運用者。機械学習(画像処理)バックグラウンド。 「ファイナンス機械学習ー金融市場分析を変える機械学習アルゴリズムの理論と実践」(2019, きんざい)監訳者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした