1
0

More than 3 years have passed since last update.

PytorchでCSVで保存しているデータを線形回帰する一歩手前までの話

Posted at

前回に引き続き、今回も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.png

hsplitといわれると、horizontalに(行が並んでいる方向)に沿って切断しそうに見えます。
しかし、実際には、horizontalなものを叩き切るのがhsplitのようです。
(風邪薬は風邪になるための薬ではなく風邪の症状に効く薬であるのに似ていますね。)

indices_or_sectionsは、刃を入れる箇所を指定できます。
刃を入れる箇所が1か所であろうと、配列で指定する必要があります。

切り分けたものを、pytorchに読み込ませる

pytorchに読み込ませるには、from_numpyを使います。

import torch

inputs  = torch.from_numpy(inputs)
targets = torch.from_numpy(targets)

from_numpy.png

できました!

あとは、前回の記事のような形で線形回帰を行うことができます。

1
0
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
1
0