今回のデータはnumpyを使って作成していきます。
結構簡単に作成することができますので、機械学習がしたいけど、データがない方は乱数を使って自作してみるといいかなと思います。
単回帰モデルの公式は
y = ax + b
単回帰モデルの公式
中学1年生で学ぶレベルなので非常に簡単です。
y = ax + b
※y = 従属変数(バイアス)(今回作成するデータ)
x = 独立変数(入力データ)(今回作成するデータ)
a = 決定係数(重み)(今回は任意の数値で作成します。)
b = 切片(今回は任意の数値で作成します。)
ライブラリのインポート
下記のライブラリをインポートします。
import numpy as np #今回のメインライブラリ
データを作成する。
早速コードを書いてデータを作成します。
下記のコードに説明分を乗せています。わからない部分は飛ばしてもらって大丈夫です。
次の項目で内容を詳しく説明します。
np.random.uniformメソッドについては後程説明しますので、とりあえずこんな感じかと認識してもらえればOKです。
#作成するデータの個数(作成したいデータの個数を入力します。)
datas = 1000
#決定係数:任意の数値(従属変数を作成するときに使用します)
a = 5
#切片:任意の数値(従属変数を作成するときに使用します)
b = 3
#この変数はデータに多少のばらつきを作るための特殊な変数です。
#この変数を大きくするとデータにばらつきが発生しします。
noise = np.random.uniform(0.1,-0.1,(datas,1))
#以下のメソッドでデータ[x]を作成していきます。
x = np.random.uniform(10,-10,(datas,1))
#各変数を用いて従属変数(バイアス)を算出します。
y = a * x + b + noise
np.random.uniformの説明
このメソッドを使用して独立変数x,noizeを作成します。
まずnp.random.uniformメソッドを呼び出すことでarray形式でランダムなデータを作成してくれます。引数を指定しない場合0から1までの乱数を作成します、引数をもちいることで範囲を指定してランダムなデータを作成することができます。
機能について
np.random.uniformは一様分布からサンプルを抽出します。
上記の表現を簡単に説明すると偏りがないようなデータを作るってことです。
また、引数として[low],[high]を渡すことで任意の範囲でのランダムの数値を作成することができます。
返り値はndarray形式で帰ってきます。
引数について
- low:生成する値の下限をfloat型(小数点を含む形)で渡します。int型でも大丈夫です。
- high:生成する値の上限をfloat型(小数点を含む形)で渡します。int型でも大丈夫です。
- size:生成する値の行列を指定します。指定する形は大きく2パターンになります。
- int型
- int型のタプル
sizeで躓くかもしれないので、下記の画像を参考に理解してください。
![](https://i0.wp.com/bomcler.net/wp-content/uploads/2022/01/852493e4b167f4d2ca1475841e9f8ce4.jpg?resize=960%2C540&ssl=1)
従属変数(バイアス)に関する説明
今回はyの値も作成します。従属変数を一から作成するためには、回帰モデルが必要です。
そのため、[y = ax + b]を使用して、np.random.uniformで作成した独立変数から任意の従属変数を作成します。
超簡単に説明すると、ax + bの計算結果を変数[y]に保存します。
データを保存する。
下記のコードを記述することによって今回のデータを保存できます。
np.savez('test_data', inputs=x, targets=y)
このコードを実行すると’test_data.npz’というファイル名で保存されます。
保存したデータは実行したファイルと同じ階層に保存されます。npz形式のファイルは普通には開けないので、np.loadメソッドで読み込みます。
‘test_data’の部分は任意のファイル名にしてください。
inputs=xとtargets=yのinputsとtargetsの部分は列のタイトルです。
x,yは今回作成した独立変数と従属変数が入っています。
まとめ
今回は単回帰モデル用のデータを作成しましたが、重回帰モデルも独立変数の数を増やすだけなので、簡単に作成できると思います。
機械学習の勉強したいけど、データがないんだよな~と思っている方の一助になれば幸いです。
Twitterフォローしてもらえるととてもうれしいです。
ここまで読んでいただきありがとうございました。
コメント