79
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-19

方針

オンライン学習プラットフォーム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)]
とする。--> 参考記事

79
87
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?