前回に引き続き、今回もPytorchを使用した線形回帰についてです。
線形回帰を実践で行うには、CSVとして保存されているデータを読み込んで計算をすることでしょう。
今回は、CSVとして保存されているデータを、線形回帰を行う直前までの状態に加工します。
#目標
今回の目標は、CSVファイルとして1つのファイルに保存されている情報を、2つのPyTrochのtensor(targets, inputs)にすることです。
方針は以下の通りです。
csvをnumpy.ndarrayとして読み込む
読み込んだnumpy.ndarrayをinputsとtargetsに切り分ける
切り分けたものを、PyTorchに読み込ませる
csvをnumpy.ndarrayとして読み込む
numpy.loadtxt()メソッドを使って、csvを読み込みます。
import numpy as np
#ファイルのパスは適切なものを入力する。
f = np.loadtxt("C:\\Users\\YOURNAME\\Desktop\\FILENAME.csv", delimiter=',', encoding="utf-8", skiprows=1)
■失敗例
•パスをペーストしたときに""を"\"にするのを忘れた。
エラーが起こります。
•delimiterを設定し忘れた
delimiterは、csvをndarrayにするための区切り文字です。
delimiterを設定しないと、ndarrayの行・列の区切りが意図しない形になります。
今回は、コンマをdelimiterとして設定しています。
•encodingを設定し忘れた
文字化けします。
•skiprowsを設定し忘れた
csvファイルの1行目には、各項目の項目名が、数字以外の文字で記載されている場合が多いかと思います。
その項目名の行を飛ばさないと、ndarrayとして正しく読み込まれません。
•日本語が途中で混ざっていた
ndarrayとして読み込ませたい部分に、本来ならば「49」などの数字だけが入ってほしいにもかかわらず「49件」などのように不要な文字が入っている場合があり得ます。
その場合も、エラーを起こします。
#読み込んだnumpy.ndarrayをinputsとtargetsに切り分ける
PyTorchで線形回帰を行うためには、inputsとtargetsという2種類の情報が必要です。
しかし、csvを読み込んだばかりでは、使用したい情報がどちらも1つのndarrayとしてくっついてしまっています。
今回は、ndarrayの最も左の2列をtargets、それより右側すべてをinputsとして使用します。
targets, inputs = np.hsplit(f, indices_or_sections = [2])
hsplitといわれると、horizontalに(行が並んでいる方向)に沿って切断しそうに見えます。
しかし、実際には、horizontalなものを叩き切るのがhsplitのようです。
(風邪薬は風邪になるための薬ではなく風邪の症状に効く薬であるのに似ていますね。)
indices_or_sectionsは、刃を入れる箇所を指定できます。
刃を入れる箇所が1か所であろうと、配列で指定する必要があります。
#切り分けたものを、pytorchに読み込ませる
pytorchに読み込ませるには、from_numpyを使います。
import torch
inputs = torch.from_numpy(inputs)
targets = torch.from_numpy(targets)
できました!
あとは、前回の記事のような形で線形回帰を行うことができます。