AI・機械学習

Numpyを使って線形回帰・非線形回帰 非エンジニア向けにcsv読みこみから【Python回帰分析①】

助手ミルク
助手ミルク
回帰分析??回って帰る分析??どんな分析なんですか??

虎ぱぱ
虎ぱぱ
女子高生の寄り道みたいな言い方しない!!

助手ミルク
助手ミルク
突っ込みセンスな…。

今回は『回帰分析』について書きます!!定番ですが、まずはWiki先生に聞いてみます.

回帰(かいき、regression)とは、統計学において、Y が連続値の時にデータに Y = f(X) というモデル(「定量的な関係の構造」)を当てはめる事。別の言い方では、連続尺度の従属変数(目的変数)Y と独立変数(説明変数)X の間にモデルを当てはめること。X が1次元ならば単回帰、X が2次元以上ならば重回帰と言う。Y が離散の場合は分類と言う。

回帰分析(かいきぶんせき、regression analysis)とは、回帰により分析する事。

回帰で使われる、最も基本的なモデルは Y = AX + B という形式の線形回帰である。

出展元:Wikipedia

簡単に言うと、ある値を分析して,”X”と”Y”の相関関係を確認⇒今後”X”が変化した時に”Y”がどんな風に変化するかを予測するという分析手法です。

これだけだと解りづらいので…子供さんの年齢と身長を例に説明します!!

X軸に年齢,Y軸に身長を取っています。

育ち盛りの子供さん。すぐに体も大きくなって服も切れなくなる…8歳になった時の身長、気になりませんか!?

これを予測するための手法が回帰分析です.

一口に回帰分析といっても色々な計算パターンが存在しますが,最も単純な線形単回帰分析を行った例が☟☟☟のグラフです.

最小二乗法という計算方法で導き出された線が追加されています。

虎ぱぱ
虎ぱぱ
なんとなく予測できそうですよね??ふむふむ…このまま行くと140cm越えおっきいな…正しいのか?非線形回帰分析も必要か…よしPythonで回そうか。

この記事を読んで得する人は??機械学習初心者は必見

 

 

今回は回帰分析をこれから始めたい方に読んでいただきたいです。実際にPythonのNumpyを使って分析を実践します!!

 

回帰分析は機械学習エンジニアやデータサイエンティストは必ずと言っていほどぶちあたる壁なので、こんな方は読んで損がないです。☟☟☟

 

 

  • 回帰分析の基礎を学んで、イメージをつかみたい方



  • 機械学習、AI系のエンジニア・データサイエンティストを志す方



  • Pythonの”Numpy”これ『ナムパイ』と読みます.ギリ知ってた方 

 

助手ミルク
助手ミルク
単回帰・重回帰とか線形・非線形とか色んな言葉が出てきてややこしいです。

虎ぱぱ
虎ぱぱ
そうですね。まずは頭を整理した上で実践!!それでは説明していきます(*’ω’*)

 

 

線形回帰と非線形回帰~”直線”か”直線じゃない”か

 

助手ミルク
助手ミルク
そもそも線形と非線形ってなんですか?文系にわかるように説明して下さい(´・ω・`)

虎ぱぱ
虎ぱぱ
『線形』というのは直線のこと、『非線形』というのは直線でないこと。

助手ミルク
助手ミルク
なるほど!じゃあ線形はストレート非線形はカーブですね!?

虎ぱぱ
虎ぱぱ
ん。そうだね。(ピッチャーの球種みたいに言うけども。)

 

 

線形回帰というのはさきほども例に出しましたが、非常にシンプルで、一本の直線を引いて予測する手法、つまり1次式を用いた分析方法です。☟☟☟



 

 

それに対して、非線形回帰は2次式以上!!複雑な分布のデータにも対応できます!!

 

 

 

助手ミルク
助手ミルク
8歳の時を予想すると…ストレート(線形)140越えちゃうかな…本当に!?と思いますが、カーブ(非線形回帰)だと125くらいかな…いい線ですね。

虎ぱぱ
虎ぱぱ
うん。緩急差があっていいピッチャーだと思うよ。8歳としては化け物だね…

助手ミルク
助手ミルク
先生…ふざけないでください。私は回帰の話をしているんです。

虎ぱぱ
虎ぱぱ
あっ野球じゃなかった。(ちょっと悪意あったろ。)そうですね。非線形回帰のほうが正確そう。ただ非線形だとあまりにもばらつきが大きいデータも向いてなかったり万能ではないんだ。二つの特性を理解して使い分ける必要があるよ。

助手ミルク
助手ミルク
…目指せ奪三振王。

虎ぱぱ
虎ぱぱ
やっぱりふざけてる。(逆だったら怒るくせに)

 

 

単回帰分析と重回帰分析~”単体”か”重ねる”か

 

助手ミルク
助手ミルク
単体か重ねるか??どういうことですか??

虎ぱぱ
虎ぱぱ
うん。ネーミングが非常に解りづらいよね。つまりは予測できるための変数が何次元あるかということなんだ。

助手ミルク
助手ミルク
身長Yを知りたい場合、年齢Xだけだと情報が一つだから1次元?つまり単回帰分析??

虎ぱぱ
虎ぱぱ
その通り!!それに加えて身長を推測するための手段として、『体重』という情報を得られた場合。年齢と体重の2つの情報(2次元)から推測できる。これが重回帰分析です!!

 

 

年齢と体重の2次元のパラメータを使って分析できますので,より精度があがります。現在ではExcelの機能を使えば簡単に分析することもできますので,簡単な分析であればお勧めです。

 

2次元以上であれば全て『重回帰分析』になります。

 

 

Python Numpy 使って単回帰分析をやってみる.

虎ぱぱ
虎ぱぱ
それでは実際Pythonを使って単回帰分析をしていきます!!今回はCreepyNutsさんのCD価格を予想します!!

助手ミルク
助手ミルク
はい!?ここへきて子供の身長はどこいったの??

虎ぱぱ
虎ぱぱ
だって…CreepyNuts好きだし…CD買いたいけどオークションでしか売ってないのあるし…でもお小遣いないし…今すぐ買わなきゃ高騰しちゃうってわかったら買ってくれるでしょ!?

助手ミルク
助手ミルク
…仕方ないわね。いいわ。分析しなさい!!(アンタが好きなのはR指定よりZeebraでしょ。食べ物として。)

 

CreepyNutsさん大好きです!!特にRさん。前回書いた記事です。☟☟☟


https://kgrneer.com/creepy-nuts-python/

それでは早速コードを書いて行きます☟☟

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
#変数 fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
#y軸csvデータ読み込み 
data = pd.read_csv('cp.csv') 
y = np.array(data)#配列化 
y = y.reshape(-1,)#次元変更(2から1次元) 
#日付のx軸を作成 
x = pd.date_range('2019-08-30 00:00:00', periods=16, freq='d') 
#線形回帰次数1 
x1=np.arange(16) 
ab = np.polyfit(x1,y,1) 
y1 = np.poly1d(ab)(x1) 
#非線形回帰次数5 
ab = np.polyfit(x1,y,5) 
y2 = np.poly1d(ab)(x1) 
#グラフ作成 
ax.plot(x,y,'b') 
ax.plot(x,y1,'k') 
ax.plot(x,y2,'--k') 
#グラフフォーマットの指定 
days = mdates.DayLocator() 
daysFmt = mdates.DateFormatter('%m-%d') 
ax.xaxis.set_major_locator(days) 
ax.xaxis.set_major_formatter(daysFmt) 
plt.show()

[

特に重要なのは

#線形回帰次数1

ab = np.polyfit(x1,y,1)

y1 = np.poly1d(ab)(x1)

 

#線形回帰次数5

ab = np.polyfit(x1,y,5)

y2 = np.poly1d(ab)(x1)

 

 

の2パート。np.とつくのはNumpyの関数です。

 

 

・np.polyfit(x,y,n)  n 次の式で 2 変数(xとy)の最小二乗を行う関数

・np.poly1d(ab)(x1) は  : 近似式(ab)に(x1)を代入し、y1の値を生成

 

 

 

今回は1次式と5次式を書いてます!!結果がこちら☟☟☟

 

 

 

青線は実際の価格推移、黒実線は線形回帰分析結果,黒破線は非線形回帰分析結果です!!

 

助手ミルク
助手ミルク
やるじゃない!!だいたいの予想はできそうね。正確にはいくらになるの??

虎ぱぱ
虎ぱぱ
正確な値の算出は説明に時間がかかるので、別の記事で書いています!!

 

scikit-learnで線形回帰分析 【Python 回帰分析②】PythonプログラミングのNumpyで線形回帰分析した結果の精度を確認するために、決定係数を導き出したい。Scikit-learnを使うことで、簡単に実装ができたので、記事にしました。機械学習エンジニアを目指す方は読んでみて下さい。...

 

まとめ

 

  • 線形回帰と非線形回帰は分析に使う式が1次式か2次式以上かの違い

     

  • 単回帰分析と重回帰分析の違いは分析に使用するパラメータが1次元か2次元以上かの違い

     

  • 回帰分析はPython Numpy で比較的簡単に実装可能

     

  • R指定さん応援してます!!(CD欲しい)
  •  

今回プログラミングに使ったPythonのライブラリはANACONDAというディストリビューションを使うことで簡単にインストールできちゃいます☟

”ANACONDA”でPythonの機械学習やデータ分析を効率化【インストール方法と使い方】Pythonのディストリビューション『ANACONDA』今や機械学習やデータ分析,AIプログラミングには欠かせないアイテムです。AIエンジニアを目指す方はまずインストールしといて間違いないでしょう。この記事を見ればダウンロード⇒インストール⇒動作確認の手順がわかります。...

 

エンジニアやブログに興味がある方はこちらもどうぞ♪♪

高卒技術者の副業【エンジニア×ブログでPDCAをフル回転】高卒で副業を探している方!!ブログがおすすめです。ブログがおすすめな理由はこの記事を読めばわかります。私は高卒のエンジニアですが、ブログとの相性は最強です。さらに独自のPDCA組んで回した怖いものなし読めばわかります。...

 

座右の銘は明日は明日の風が吹く。虎ぱぱでした♪

PythonでAIを作ってみたい⇒誰でも勉強すればできる?
虎ジュニア
虎ジュニア
ぱぱー僕もAI作ってみたいよ~機械学習教えてよ~
虎ぱぱ
虎ぱぱ
ジュニアにはまだ早いよ。大人になったらね~
助手ミルク
助手ミルク
ちょっ…いつも挑戦がどうとか言っときながら…子供の夢を奪う気!?AIは誰でも作れるんじゃなかったの!?
虎ぱぱ
虎ぱぱ
そりゃ…いつも言ってる通り、正しく学べば誰でも作れますよ!!(そうは言ってもジュニアは3歳だぞ。)