sklearnによる回帰問題(線形回帰と多項式回帰)

udemyのdata science A-Zの回帰の問題が終わりましたのでその進捗と学んだことを応用して回帰してみたいと思います。

たぶんですが、この講義は原理を理解している人がやるとスムーズなのでしょうね。 原理を知った上で、じゃあプログラミングはどうやろうか知りたい人だとスムーズに進むと思います。 僕はいまいち理解していないことが多かったため、プラスαでなにをしているのか調べることに結構時間かかりました。

regression

回帰というのは従属変数yと独立変数\bf{X}の間にモデルを当てはめるということ。 \bf{X}yがあたえられたとき、y = f(\bf{X}, \beta) と表すことができるような、 \betaを探しだす。

y = \bf{X}  \beta
 \betaが未知のパラメータ、求めたいパラメータでスカラもしくはベクトルになります。

線形回帰

今回はLinearRegression 線形回帰のみ考えたいと思います。

 y= \beta_1  x_1 + \beta_0 のようなモデルは単回帰を表します。

このようにy = f(x) で表されるモデルにはあるパターンがあります。 xが2次元以上のものは重回帰と呼ぶようです。  y =  \beta_0 + \beta_1 x_1  + \beta_2 x_2

xが多項式となる場合は多項式回帰となります。  y =  \beta_0 + \beta_1 x_1  + \beta_2  {x_1}^2 このモデルをフィットさせると直線にはならないのですが、\betaに関してはLinearなためLinear Regressionだそうです。

どのモデルがうまくフィットするのか考えることが重要です。

近似方法

さてモデルを考えたら係数を求めていくわけですが、その際に使用する手法は最小2乗近似という方法をとります。

実際にやってみた

UCIのMachine Learning Repositoryからデータセットを取ってきて回帰問題を考えてみます。 今回はcomputer hardwareというデータセットを使います。

http://archive.ics.uci.edu/ml/datasets/Computer+Hardware

まずは
X:maximum main memory in kilobytes (integer)
y:estimated relative performance from the original article (integer)
として線形回帰を行っていきます。

まずライブラリとデータセットを読み込みます。

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('dataset.csv')

# Simple Linear Regression
X = dataset.loc[:, ['ERP']].values
y = dataset.loc[:, ['MMAX']].values

最初は単回帰を行ってみます。

# importing the Linear Model
from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(X, y)
#visualising the result 
y_pred = reg.predict(X)
plt.scatter(X,y, color='red')
plt.plot(X, y_pred, color='blue')
plt.title("MMAX(maximum main memory in kilobytes) vs \n ERP(estimated relative performance)\n(Linear Regression)")
plt.xlabel("MMAX")
plt.ylabel("ERP")
plt.show()

f:id:coldwarmer:20170724090329p:plain
こんな感じになりました。 青線が今回作ったモデルを使ってyを予測した値になります。 よくフィットしているとはいえないですね。

次は多項式を用いて回帰してみようと思います。 3次の多項式で近似してみます。

# Polynomial Regression
from sklearn.preprocessing import PolynomialFeatures
polynomial_features = PolynomialFeatures(degree = 3)
X_poly = polynomial_features.fit_transform(X)
poly_reg = LinearRegression()
poly_reg.fit(X_poly, y)


# Visualising the Polynomial Regression results 
plt.scatter(X, y, color = 'red')
plt.plot(X_grid, poly_reg.predict(polynomial_features.fit_transform(X)), color = 'blue')
plt.title("MMAX(maximum main memory in kilobytes) vs \n ERP(estimated relative performance)\n(Polinomial Regression)")
plt.xlabel('MMAX')
plt.ylabel('ERP')
plt.show()

f:id:coldwarmer:20170724090350p:plain
結構いい感じ。

最後に6次の多項式で回帰してみます。
f:id:coldwarmer:20170724091027p:plain
うまくいきませんね。 これはオーバーフィッティングしている状態ですね。

とりあえず単回帰と多項式回帰はできました。 本当は最小2乗近似の誤差を確認したいのですがやり方がわかりません。。。 分かり次第追記します。

今回重回帰をやらなかったのと、Rを使ってないのでRで重回帰をやってみます。。

また次のコンテンツは決定木の回帰ということなのでそちらもまとめていきたいと思います。

ではまた。

SOFT SKILLS ソフトウェア開発者の人生マニュアルをよんで

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

僕はとりあえずソフトではなくハードの会社に入社することになりましたが、将来の参考になればと思って読み始めました。

人生のマニュアルというにふさわしいほどの量。そのため話題は多岐に渡ります。 エンジニアとしてのキャリア自己のアピール論のみではなく、健康や投資、さらに恋愛にまで踏み込んでいる。(恋愛についての話いるか??って思ったけど、エンジニアの恋愛戦略はちょっとおもしろかった。)

筆者はかなりストイックな人物なようで、正直普通の人ではない。 色々エピソードが盛り込んであるが、この本の話は著者が達成した項目に対して、その過程、どんな方法を用いてそれを達成したのかを解説するような流れになっている。

この本のスタートはキャリアについての話から。 その中でもマインドセット、会社との関係性についての話から始まる。 終身雇用の時代は終わりつつある現代、ソフトウェア開発者は特にその傾向が強いだろう。そんな最中どのような心がまえで働くのか、キャリアについてどう考えていくべきか書いてある。

その次の章は自己アピールの方法について。 ここも結構参考になりました。 ブログを書こうと思ったのもここを読んだ影響が大きいです。

なにをすべきかクリアにしてくれる1冊かなと思います。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

データの前処理について Data preprocessing| Udemy Machine Learning A-Z™: Hands-On Python & R In Data Science

データの前処理について(Data Preprocessing)

こんばんは。 先週からudemyでデータサイエンスについての講義を受講し始めました。今週はパート1でデータサイエンスに使用するデータの前処理について学びました。 その記録としてまとめてみます。 

前処理の内容

使用するライブラリとデータセットのインポート 損失しているデータの補完 categorical data データセットをテストセットとトレーニングセットへ分割 feature scaling

 

Pythonを用いたデータの前処理Data preprocessing

使用するライブラリとデータセットのインポート 

ライブラリは numpy matplotlib pandas を毎回使用します。

この中でpandasのread_csvというメソッドを利用してデータセットを取り込みます。 またこの講義に使用するデータセットは、最後の列が従属変数の値、他が独立変数となるように指定している。従属変数をy、独立変数をXとして振り分けます。 pandasのiloc()で行と列を選択してあげます。

損失しているデータの補完

データセットの中にデータのぬけがあった場合それらをどう処理すべきでしょうか。 一つの方法としては抜けているデータごと削除してしまおう、といった方法があります。 しかし削除してしまった分、精度が落ちてしまうので良い方法とは言えない。 平均的な値を入力するのが良い方法。 そのためにはsklearn.preprocessingにあるImputerクラスを利用します。 そしてimputeしたい範囲にfit_transformする。

categorical data

categorical dataは数値以外のデータを数値データとか処理しやすい値に置き換えること だと思いました。 例えば出身地であれば、 宮城→1 岩手→2 福島→3 といった感じです。 これはsklearn.preprocessingにあるLabelEncoderを使用します。

しかしこのように置き換えると順番が発生しデータの重みが変わってしまう。 全て0か1で表すためには元データを行列のデータに変換します。 pythonではsklearn.preprocessingにあるOneHotEncoderを使用します。

宮城→[1,0,0] 岩手→[0,1,0] 福島→[0,0,1] といった感じに変換できます。

データセットの分割

training setとtest setに分割します。 通常はテストセットは20%くらいだそうです。 割合はケースバイケースですが、さすがに50%以上は一度も見たことがないと言ってました。

sklearn.cross_validationのtrain_test_splitメソッドを利用。 Xとyを入れてあげればそれぞれのトレーニングセットをテストセットが返ってくる。

feature scaling

feature scalingはデータのスケールを調整します。 データセットのデータをそのまま機械学習に利用してしまうと単純に数字の大きさだけみてしまうからでしょうね。 例えば温度と湿度は同じスケールで使用してしまうと大変なことになってしまいます。

今回は標準化(standardization)を行いました。 これもsklearn.preprocessingを利用します。StandardScalerを使います。

Data science の講義を受け始めました。| Udemy

Machine Learning A-Z™: Hands-On Python & R In Data Science

Udemyにてデータサイエンス、機械学習について講義をうけはじめました。

以前はCourseraのMachine Learningについてのオンライン講義を受けていました。(終盤で挫折orz)

受講した動機

2005年までに人類が生み出したデータ量は130 EXABYTES

それが2020年、東京オリンピックの年には40900 EXABYTES

となる予想があるみたいです。(講義にでてきます)

そこで、それらの膨大なデータを利用した業務はより増えていくであろうと考えてます。人工知能への応用であったり、効率化などなど。

 

つい先日内々定をメーカーからいただきまして、工場の生産管理を行う部署に配属される予定です。工場での生産においてもビックデータを用いてより効率的に生産するための施策は今後重要になってくると考えています。

生産ラインでの効率化だけではなく、生産拠点の大気汚染の度合い(従業員の健康、ストレスレベルと生産量の関係など)を調査したりなど、多角的にビッグデータを用いた仕事が増えるはず。

 

まあホットな話題なので単純に興味もあったし、以前受講したCourseraはプログラミング言語としてOctaveを利用していたので、より数値演算でよりメジャーになっているpythonとRも使ってみたかったので受講しようと思いました。

講義の概要

Machine Learningについて興味を持っている未熟者から上級者までが対象。

PythonとRでのMachine Learningに必要とされるアルゴリズムを二人のプロフェッショナルから学ぶ。

 そして

41時間のビデオから構成されています。

 

得られるであろう成果

PythonとRを用いた機械学習についてマスターする。

機械学習モデルを直感的に理解できるようになる。

・正確な予測と分析

ロバスト機械学習モデルを作る

・ビジネスに付加価値をつける

機械学習を個人的な目的に応用する。

自然言語処理、深層学習、次元削減

 

 シラバスにはこんな感じで書いてました。

目標

PythonとRを利用できるようになること。

機械学習を用いて現実的な問題を解決することができるようになる。

 

 

 

Coursera Introduction to Mathematical Thinking

Courseraで"Introduction to Mathematical Thinking"について学習始めました(第1週)

この講義はですね、ざっくりいうと数学的な考え方を身に付けようと行く講義ですね。
目的としては、数学を実世界の問題解決にどう応用するのか考えるすべを身につけることですね。
と言うのは、学校数学は型にはまった問題を解いて正解を出すことが重要視されます。
例えると箱の中で考えている状態です。
対して数学的な考えとは箱の外で考えるということになります。
そんなこともあり通常の数学の講義とは一風変わった内容になっているそうです。

全部で9週の講義になっております。第1週はガイダンス的な内容で、第2週からメインでやってくみたいです。
今週の内容としては
・数学の歴史的背景
・AND、OR、NOTの理解、それらの言語への応用
これらについて取り上げました。