質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

時系列データ(加速度データ)をRandomForestの分類手法を用いて教師あり学習から評価(再現率、適合率、F値)を出力したい

do-shiro-to
do-shiro-to

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

1回答

0グッド

0クリップ

743閲覧

投稿2022/11/06 11:40

前提

大学生で、これまでほとんど触れたことが無かったのですが、課題で機械学習を用いた研究を行っている者です。
内容としては、車に加速度センサを設置してカーブや直進を走行した際に取得できる加速度データ(x軸、y軸、z軸)とRandomForestClassifierを使用して、学習したデータからテストデータがカーブか直進かを評価しようとしています。
データセットはcsvファイル形式で、一つのファイルにx軸加速度、y軸加速度、z軸加速度、合成加速度の4列と行数はファイル毎に違います。取得した時間がバラバラなためこうなりました。基本的に130~240の間です。
この画像は、データセットの一部になります。
イメージ説明

こちらの画像は、取得した加速度データをグラフ化した物です。
イメージ説明

実現したいこと

  • 時系列データである加速度データをRandomForestClassifierでの教師あり学習で学習(学習時、特に大きな変化が継続的に無い直進の加速度データであれば0,カーブのように部分的に山のような形状ができる加速度データであれば1,という風にルール付けて学習させたい)

  • テストデータとして取得した加速度データで評価を行い、1から0の間の数値で出力し、そのテストデータが直進なのかカーブなのかを判定したい

  • 最終的には、評価の精度を再現率や適合率、F値で出力できるようにしたい

発生している問題・エラーメッセージ

学習させる段階から、自分のデータセットをルール付けて学習させるコードが調べても分からず、ほとんどがアヤメの分類やワインの分類といった、元から用意されているデータセットがあり、部分的に自分のデータセットを入れようとコードを変えても実行できなくなってしまっています。

TypeError Traceback (most recent call last) <ipython-input-2-7f7ea800a020> in <module> 20 21 ---> 22 iris_list = df() 23 24 x_train, x_test, t_train, t_test = train_test_split( TypeError: 'DataFrame' object is not callable

該当のソースコード

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score df= pd.read_csv('k1xyz.csv') index_col='None', parse_dates=True df.head() #確認 df.plot() plt.title('curve.1') #グラフタイトル plt.ylabel('Acceleration') #タテ軸のラベル plt.xlabel('time') #ヨコ軸のラベル plt.show() iris_list = df() x_train, x_test, t_train, t_test = train_test_split( iris_list.data, iris_list.target, test_size=0.3, random_state=0) # print(len(x_train)) # print(len(x_test)) # 学習モデルを作成 model = RandomForestClassifier() # 学習モデルにテストデータを与えて学習させる model.fit(x_train, t_train) # テストデータを与えて各データの種類を推測 test = model.predict(x_test) # テストデータのラベルを与えて答え合わせ score = accuracy_score(t_test, test) print(f"正解率:{score * 100}%")

試したこと

なんとかRandomForestを用いて分類したいと思い、様々なサイトの中からアヤメの分類を行うというサイトを参考に自分のデータセットを入力できるようにコードを変更しました。
リンク内容

補足情報(FW/ツールのバージョンなど)

実行環境はGoogleColaboratoryです。
私自身、こういった場で質問するのは初めてで、おそらく閲覧していただいている皆様にとっては、的外れなことをしようとしていたり、全く情報が足りていなかったりもあるかと思います。
お目汚ししてしまい、本当に申し訳ありません。
もしもよろしければ、何かご回答いただけますと幸いです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

PondVillege

2022/11/06 12:18 編集

例示いただいているグラフは,教師データとして使いたい全部のデータが入っているものですか? それともそのグラフ全体を見て,0か1かの分類を行いたいのでしょうか? > 大きな変化が継続的に無い直進の加速度データであれば0,カーブのように部分的に山のような形状ができる加速度データであれば1 という話であれば,RandomForest()なぞ使わずとも,移動平均をとって数値微分した傾きを計算すれば,フラットであるか山or谷かの判断ができますが,これでは不足である.ということでしょうか.
do-shiro-to

2022/11/06 14:04

コメント頂き、ありがとうございます。 例示したグラフは、いくつかあるデータセットの中のうちの一つで、全部のデータが入っているものではありません。同じような形式のcsvファイルが他にいくつかあり、それをデータセットとしようと考えていました。 仰るとおり、山や谷の判断はRandomForestを使用しなくても良さそうでしたが、最終的に出力したいものが、ルール付けて学習させた後に評価の適合率や再現率、F値があり、これはRandomForestなどの機械学習が必要では無いかと考えましたが、そういう訳ではないのでしょうか…?
PondVillege

2022/11/06 14:20

> 例示したグラフは、いくつかあるデータセットの中のうちの一つで、全部のデータが入っているものではありません。 現状のコードは1つのデータしか読み込めておらず,ループ文などを用いてデータセットを構成する過程が必要と考えます. 「適合率や再現率、F値」は別に機械学習だけの評価値ではないので,古典的手法でも良いのではないか,と考えました. 教師データの数が少ないときは,古典的手法の方が精度が高くなる傾向にありますので,用意しているデータの数が気になるところです.
do-shiro-to

2022/11/06 14:44

返信ありがとうございます。 そもそもデータセットの作り方が違うのですね…ループ文について調べてもう一度データセットを作ってみたいと思います。 今のところ取得したデータは例示したようなものが、カーブが約20種類、直進が約10種類ほどです。用意しているデータが少ない状態でこんな質問をしてしまい、申し訳ありません。 その古典的手法というのは、RandomForest以外の機械学習モデルと言うことでしょうか…? 可能であれば、適合率や再現率、F値を出す事ができれば、と思っているのですが今のままでは難しそうでしょうか。
do-shiro-to

2022/11/06 15:03

ループ文を用いたデータセット厚生というのは、こちらのサイトで紹介されているように全てのデータを繋げるという認識でよろしいでしょうか? もしも的外れで不快な気持ちにしてしまったら、申し訳ございません。 https://sinyblog.com/deaplearning/preprocessing_002/
PondVillege

2022/11/06 16:03 編集

教師データのパラメータ数が,データ数に対して多すぎるので,ほぼ確実に過学習しますね, 古典的手法と言ったのは先述の「移動平均をとって数値微分した傾きを計算」などの線形的手法のことを言いました.伝わりづらくてすみません. ちなみに,こういったデータマイニングでは学習に関して時間をかけるということよりも,前処理に時間を割くことが多いです.状況を察するからにまずはデータセットを作成することから始めないといけないですね, そちらのサイトで紹介されているのは1ファイルを複数データに分割するやり方なので,質問者さんのやりたい状況と異なると思います.株価予測なので,「過去11日分を入力データとして翌日のデータを予測する」としているので,分類をやりたい今回の状況に対して回帰を目的としているので,この点も異なっていますね. ただ,これを真似て1ファイルのデータを分割して教示データを増やす,ということはやって良いと思います.
do-shiro-to

2022/11/06 16:17

引き続きのコメント本当にありがとうございます。 線形的手法のことでしたか!こちらこそ、汲み取る事ができず申し訳ございません。 ただ、非常にわがままではあるのですが、課題の性質上可能であればなにか機械学習などの技術を使用したいのですが、例えばLSTMなどでも適合率等の評価値は出せる物なのでしょうか? これまではデータセットは作れていると思ってしまっていましたが、何も分かっていなかったことを痛感しております…。なんとか大至急使うことができるデータセットを作成できるよう調べながら試行してみます。 データセット内の項目としては、現在のx軸、y軸、z軸加速度と合成加速度の構成でも問題は無いでしょうか。平均や最大値最小値など、出せる物はどんどん追加していくべきでしょうか?これでは最終的に出したい物とは関係無くなってしまいそうだったり、過学習が出てしまったりしそうで不安なのですが、それでもデータセットの構成は多い方が良いでしょうか。
PondVillege

2022/11/06 16:33

> LSTMなどでも適合率等の評価値は出せる 出せます. 基本的には,分類器の出した値と,用意した正解データを比較して出る値なので,いかなる分類器でも正解データと比較可能な値が出るなら,比較できます. > データセット内の項目としては、現在のx軸、y軸、z軸加速度と合成加速度の構成でも問題は無いでしょうか x軸,y軸,z軸のデータを用いて合成加速度が計算されているなら,多重共線性があるのでまずいかと思います. x,y,z軸のデータでやるか,合成加速度だけでやるか決める必要があると考えます. > 平均や最大値最小値など、出せる物はどんどん追加していくべきでしょうか? 多重共線性が出そうなものなので推奨しかねます.過学習が起きそうにもなりますね.
do-shiro-to

2022/11/06 16:52

回答頂きありがとうございます。 出せるのですね!ありがとうございます。となると現状の問題はやはり用意する正解データのために学習させるデータセットにあると思っても良さそうでしょうか。 >x,y,z軸のデータでやるか,合成加速度だけでやるか決める必要がある グラフにしたとき、例えばx軸には大きな変化や山があっても合成加速度にした途端カーブか直進かの見分けがつかなくなる事もあり、個人的にはx、y、z軸を使用したいので、この三つでいきたいと思います!ちなみに回答者様から見たときに、こういった分類を行う際、合成加速度を使用するメリットなどはあるでしょうか?お教えいただけると幸いです。 >多重共線性が出そうなものなので推奨しかねます できる限り要素は少なくデータセットを作成したいと思います!ありがとうございます!
do-shiro-to

2022/11/06 17:40

所でなのですが、x、y、z軸でデータセットを作成し直すとして、質問に掲載したコードを修正すれば、該当のソースコード部の最後にあるF値等を出力や、教師データを1か0でルール付けて学習などは可能か不可能かで言うとどちらになるでしょうか。 少し、過程を飛ばすような質問をしてしまい心苦しいのですが、お答えいただけますと嬉しく思います。
PondVillege

2022/11/06 17:48

> 現状の問題はやはり用意する正解データのために学習させるデータセット そうですね,どう作るかが課題です.1ファイルから複数データを作るときは,1データのサンプル長を決めると,それによって作られるデータセットの数も決まりますね.もちろん1ファイル1データでも良いです. > 合成加速度を使用するメリット > x軸には大きな変化や山があっても合成加速度にした途端カーブか直進かの見分けがつかなくなる事もあり あまり精度良くないときに,アンサンブル学習をするようにして,その際にxyzを使うモデルと別のモデルに合成加速度を利用すると良いと思います.見たい特徴量が消えてしまうのは,あまり使うメリットがあるようには思えませんね.
do-shiro-to

2022/11/06 18:10

回答ありがとうございます。 >もちろん1ファイル1データでも良い これは、一つのファイルにx、y、z軸のデータを作って同じ計測期間で複数のファイルをcurve1,curve2,curve3,straight1,straight2,straight3………のように作成し、その複数のファイルを同時に学習させるというイメージでよろしいでしょうか…? ありがとうございます!合成加速度は精度が良くないときに別のモデルで使用してみたいと思います!

回答1

1

ベストアンサー

質問に掲載したコードを修正すれば、該当のソースコード部の最後にあるF値等を出力や、教師データを1か0でルール付けて学習などは可能か不可能か

可能です.こちらでは質問のデータを持ち合わせていないので,同様のデータ生成を行なって最終的な評価までのコードを書いてみました.

全てのCSVファイルが同じ行数であることを前提に書いています.変数rollに全てのCSVファイルのうち1番小さい行数未満の値を代入すればなんでも良いです.そのときは全てのCSVファイルのサイズは同じでなくて構いません.130~240ぐらいとのことだったので,カーブの時間全体を覆えるデータ長を目視で確認して129以下の値を代入することが出来ます.

Python

1import numpy as np 2from glob import glob 3import csv 4import os 5 6# データ生成 7# 直進(straight)とカーブ(curve)のデータはそれぞれ同じフォルダに入っているものとして扱う 8os.makedirs("./data/straight/", exist_ok = True) 9os.makedirs("./data/curve/", exist_ok = True) 10 11def wave(name, t): # 時刻tにおけるデータを生成 12 if name == "straight": 13 return np.random.randn(4) 14 else: 15 return np.sin(t + np.random.randn(4)) 16 17def make_data(name, n): 18 for file in range(n): 19 with open(f"./data/{name}/{file}.csv", "w") as f: 20 writer = csv.writer(f) 21 writer.writerow(["x", "y", "z", "res"]) # ヘッダ書き込み 22 for i in range(100): # 1ファイルのデータ長100で生成 23 writer.writerow(list(wave(name, i))) 24 25make_data("straight", 20) 26make_data("curve", 10) 27 28# ここから本質的な内容 29 30def load_csv(file, y_value): # ファイル名fileのCSV読み込み,1データを複数に分割する 31 # pandas.read_csv()を使わないで書いてみる 32 _x = list() # 1ファイルのデータすべて_xに格納する 33 with open(file, "r") as f: 34 reader = csv.reader(f) 35 header = next(reader) # ヘッダは読み飛ばし 36 for row in reader: 37 _x.append([float(col) for col in row[:3]]) 38 39 # データ分割部 40 _x = np.array(_x) # ここの _x は pd.read_csv(file).values[:, :3] と同義だが一応フルスクラッチで書いてる 41 roll = int(len(_x) * 0.8) # データ長の8割を1データにしてrollさせる. 42 x, y = list(), list() 43 for r in range(len(_x) - roll): # 2割のデータ長さだけデータが作られる. 44 x.append(_x[r: r + roll]) 45 y.append([y_value]) 46 return np.array(x), np.array(y) 47 48def load_data(): # 全データ読み込み 49 split = 2 # 最初の2ファイルは検証用データにする 50 x_train, y_train, x_valid, y_valid = list(), list(), list(), list() 51 for name, v in zip(["straight", "curve"], [0, 1]): # straightは0,curveは1にする 52 for i, file in enumerate(glob(f"./data/{name}/*.csv")): 53 _x, _y = load_csv(file, v) 54 if i < split: 55 x_valid.extend(_x) 56 y_valid.extend(_y) 57 else: 58 x_train.extend(_x) 59 y_train.extend(_y) 60 61 return map(np.array, [x_train, y_train, x_valid, y_valid]) 62 63x_train, y_train, x_valid, y_valid = load_data() 64 65# RandomForestでは1つの特長にベクトルを扱えないので,別のモデルを採用 66import tensorflow as tf 67from tensorflow.python import keras 68from keras.models import Sequential 69from keras.layers import Conv1D, Input, Flatten, Dense 70from keras.optimizers import Adam 71 72from sklearn.metrics import accuracy_score 73 74# 学習モデルを作成 75model = Sequential() 76model.add(Input(shape = x_train.shape[1:])) 77model.add(Conv1D(8, 4, strides = 2, activation = "tanh")) 78model.add(Conv1D(4, 4, strides = 2, activation = "tanh")) 79model.add(Conv1D(2, 4, strides = 2, activation = "tanh")) 80model.add(Flatten()) 81model.add(Dense(1, activation = "sigmoid")) 82 83model.compile( 84 loss = "binary_crossentropy", 85 optimizer = Adam() 86) 87# model.summary() # モデル確認用 88 89# 学習モデルにデータを与えて学習させる 90model.fit( 91 x_train, y_train, 92 batch_size = 8, 93 epochs = 50, 94 validation_data = (x_valid, y_valid) 95) 96 97# テストデータを与えて各データの種類を推測 98# 0から1の 範囲 で得られるのでroundで 四捨五入 して0か1にする 99y_pred = np.round(model.predict(x_valid, batch_size = 8)) 100 101# テストデータのラベルを与えて答え合わせ 102score = accuracy_score(y_valid, y_pred) 103print(f"正解率:{score * 100}%")

そもそも,RandomForestが時系列処理に向いているか,と聞かれればNoに近しい答えになると思います.
情報の取捨選択をしまくるので,時刻の前後関係などを見出すのことへの不得意さを否定できません.LSTMを使った方がより良い精度が得られると思います.

今回は,ある時刻の特徴量がxyzの3特長あるので1次元畳み込みを採用してみました(LSTMでも良い)が,もし合成加速度だけを使うならRandomForestも使えると思います.

上のコードでは,時系列データ分析の処理でやってはいけないことを念頭に,学習データに評価データが混じらないようにしています.注意して実装なさってください.

これは、一つのファイルにx、y、z軸のデータを作って同じ計測期間で複数のファイルをcurve1,curve2,curve3,straight1,straight2,straight3………のように作成し、その複数のファイルを同時に学習させるというイメージでよろしいでしょうか…?

はい,それで間違い無いです.その場合は上のコードにおけるload_csv()を次のようにできます.

Python

1def load_csv(file, y_value): 2 return [pd.read_csv(file).values[:, :3]], [y_value]

ただこの場合だと,ファイル次第でデータ長が違う現状には適応できていないので,適宜データの長さを揃えるような処理を書き加えてください.「同じ計測期間で複数のファイルを作成」されて長さが揃ってるなら不要です.

機械学習をやるとはいえ,前処理や学習,評価にあたって書くプログラムはほとんど配列操作に関するものになります.配列の扱いに慣れておくことをおすすめします.

特に前処理なんて扱うデータが変われば書くコードも変わります.時系列データの前処理と画像処理の前処理,構造データの前処理や自然言語の前処理など色んな種類がある中で,自分の持っているデータの前処理を完璧にこなせるコードはこの世に無いと思ってプログラミングに取り組んでください.

あまりコードを書かれたことの無いようでしたので方針を示すためコードを全て書きましたが,前処理程度はPythonの基礎を押さえていれば書けるはずです.今後の研究進捗効率のためにも急がば回れ,プログラミング基礎の勉強を推奨しておきます.

投稿2022/11/06 20:08

編集2022/11/07 02:59
PondVillege

総合スコア1066

do-shiro-to😄を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

do-shiro-to

2022/11/07 04:25

ご回答頂き、本当にありがとうございます。 ここまで丁寧かつ時間を割いてコードまで書いて頂き謝意の気持ちしかございません。 これから、頂いたコードに入力できるデータセットの作成を続けて、実行していきます。 実現したいこと等の問題が解決したら、報告します。 もしも実装していて上手くいかず、調べても分からなければまたこちらで質問させていただきたく思います。 ps_aux_grep様の仰るとおり、コードを書いたことはほとんど0と言って良いほど経験が無く、pythonの基礎も分かっていませんでした。 今回は時間的に切羽詰まってしまい、質問するのも失礼な状態でここに来てしまい非常に申し訳なく思っています。 今後は、プログラミング基礎も勉強して知識を付けていきたいと思います。 重ね重ねにはなりますが、この度はコメント、ご回答頂き本当にありがとうございます。
do-shiro-to

2022/11/07 04:45

現在コードの意味を調べたりデータセットを作ったりしていて、ふと考えたのですがこれまで私が質問していた「学習時、特に大きな変化が継続的に無い直進の加速度データであれば0,カーブのように部分的に山のような形状ができる加速度データであれば1,という風にルール付けて学習させたい」という部分は、一連の加速度データの中から0に近い(大きな変化が無い)部分を0として、カーブを走行している時(加速度が一定の数値を超えている)のみを1とルール付けて学習した方が精度が上がるのでは無いかと考えました。 これは可能性としてあるのでしょうか。また、そもそもこういった学習方法はできる物なのでしょうか。 質問に回答して頂いたそばからこのような質問続きで申し訳ございません。ご教授頂けますと幸いです。
PondVillege

2022/11/07 06:23

> 一連の加速度データの中から0に近い(大きな変化が無い)部分を0として、カーブを走行している時(加速度が一定の数値を超えている)のみを1とルール付けて学習した方が精度が上がるのでは無いか 2値化する.ということですね,でもそれなら閾値を超えただけでカーブであると判断するようなものなので,機械学習すら必要ない,「ルールベースの分類器が作れる」と言ってしまっているようなものです. ループ処理と条件分岐だけで作れるのは非常に単純ですし閾値超過でカーブ判断は非常に良い手だと思います. 直進なのに一瞬だけ閾値を超えてしまう,とかなら全然移動平均を取ることで解消できそうですね. 閾値と移動平均をとる長さをグリッドサーチするだけでこのデータの分類器は作成できそうです. 波形を2値化して機械学習に突っ込むのも可能ですが,「ルールベース等の線形手法で良いのでは」と突っ込まれる未来が見えますね.
do-shiro-to

2022/11/07 07:39

>2値化する.ということ 二値分類という物になると言うことでしょうか。 カーブと直進の判定という点で見れば、手法的にこちらの方が無理に機械学習を使用するよりも目的達成には近そうな気がしてきました…! せっかく教えて頂いたコードですのでこのまま試行してみながら、ルールベースの分類器を作成、という方向にも挑戦してみたいと思います! ちなみにこちらのルールベースの分類器の場合でも使用する加速度をx、y、z軸のままでいくと何か問題が発生する可能性はあるのでしょうか。 閾値超過を見るという方法だとグラフにしたときの線が一本だけなのでは、と思ってしまいました。それとも、三本とも見てそれぞれの閾値を設定してルールを作れば可能なのでしょうか。
PondVillege

2022/11/07 07:43

2値化と2値分類は異なります.が今回,2値化して得られた値そのものが分類結果になるのでは,と考えています. 1本だけ見ることも3本だけ見ることも可能です,3本とも見る方がルール作成がめんどくさいので,これを理由に機械学習に取り組む.ということもできると思います.
do-shiro-to

2022/11/07 08:00

返信頂きありがとうございます。 >2値化と2値分類は異なります 別物だったのですね…すみません。2値化して値を得るというのは、そもそも私が始めに質問で載せていたソースコードでは全く関係がなさそうでしょうか。 >3本とも見る方がルール作成がめんどくさいので,これを理由に機械学習に取り組む 機械学習を利用するメリットとしてはそういった物も挙げられるのですね…! まずは1本だけ見るルール作成から挑戦してみたいと思います。
PondVillege

2022/11/07 08:12

> 2値化して値を得るというのは、そもそも私が始めに質問で載せていたソースコードでは全く関係がなさそうでしょうか。 たとえばread_csv()で変数dfを獲得した後に, th = 0.5 data = df.values[:, :3] data[data < th] = 0 data[data >= th] = 1 とすれば,xyz全てにおいて,閾値th未満を0,閾値th以上を1に2値化できます. xだけ2値化するなら data[:, 0][data[:, 0] < th] = 0 data[:, 0][data[:, 0] >= th] = 1 ですね.xyzそれぞれで2値化できます.ので,質問に掲載されているコードでは今後の展開に重要なデータが読み込みである一行 df = pd.read_csv('k1xyz.csv') があるので,一概にも関係がないとは言えませんね.
do-shiro-to

2022/11/07 09:32

回答頂きありがとうございます。 早速コードに追加して実行してみたところ、0.3以上は全て1、0.3未満だと全て0という風に表示されました。これが2値化なのですね…! >xだけ2値化するなら data[:, 0][data[:, 0] < th] = 0 data[:, 0][data[:, 0] >= th] = 1 ですね.xyzそれぞれで2値化できます yやzでも試してそれぞれ2値化することができました! ここで2値化したものをルールベースの分類器作成に使用することも可能なのでしょうか?そうすればルール作成がしやすいのではないか、と考えたのですが…
PondVillege

2022/11/07 09:46

> ここで2値化したものをルールベースの分類器作成に使用することも可能なのでしょうか?そうすればルール作成がしやすいのではないか、と考えたのですが… その考えで当たってます.一括で2値化したので,簡単に閾値を超えているか判断でき,ルールがシンプルになると思います.
do-shiro-to

2022/11/07 10:46

回答ありがとうございます! 当たっていて良かったです…! ps_aux_grep様、当初の質問に対する回答だけで無く追加の質問にも一つ一つ丁寧にお答え頂き、ありがとうございます。これまで一人で調べてもなにも分からずやけになっていたのですが、本当にお助け頂きました。
do-shiro-to

2022/11/07 10:47

当初の質問や目的と違う方向に向かう可能性も出てきたので、ここで一度この質問は一区切りさせて頂きます。 回答して下さったps_aux_grep様、閲覧して頂いた皆様、ありがとうございました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。