Pythonを使用した機械学習 モーターの故障予知
pythonを使用して機械学習によるモーターの故障予知を実装しようとしております。
(ラボレベルの小規模の試験です。)
計測データは2点
・モーター負荷電流
・振動値
上記2点をPLCへ入力し、PLC⇒PCへpython上で値を取得しています。
この2つの値を使用し、簡単な機械学習モデルを作成し、
計測した値をリアルタイムでそのモデルに流し、評価を行う、といったものを実装したく考えております。
裏の目的は機械学習の触りを知ってもらうための展示品としての作成です。
発生している問題・エラーメッセージ
1.適切なモデルがわからない。(現在はk近傍法) 2.リアルタイムでのモデリングを行う際に適切な値の格納方法、 格納の型についてアドバイスをいただきたい。 (イメージは1回/1秒でサンプリングしたデータを10個程度配列型に格納し、 その配列データをモデルに流し込んで結果を出力する、というやり方です。) 3.結果の出力方法についてアドバイスをいただきたい。 現在0-1でしか出力ができておらず、可視化するにもチープな状態です。 どれか1つでもアドバイスできそうな項目がございましたらご助言いただけますと幸いでございます。 よろしくお願い致します。
該当のソースコード
python
1import csv 2import socket 3import time 4import pandas as pd 5from sklearn.neighbors import KNeighborsClassifier 6from sklearn.metrics import accuracy_score 7 8 9host_ip = '192.168.4.10' # kv-5000のIPアドレス 10host_port = 8501 # 上位リンク通信のポート番号 11 12client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 14client.connect((host_ip,host_port)) 15 # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 16 17test_data=[] 18learn_data=[] 19learn_label=[] 20test_label=[] 21 22num = 1 23 24df1 = pd.DataFrame({'input1': ['0'],'input2': ['0']},index=[0]) 25df2= pd.DataFrame({'input1': ['0'],'input2': ['0']},index=[0]) 26 27print("////教師データ入力////") 28print("正常データ入力:エンターを押すと教師データが入力される") 29input_data = input() 30while num < 10 : # 回数分繰り返す 31 32 comand0 = "RD DM10102.D\r" # ch0読み出しコマンド 33 comand1 = "RD DM10112.D\r" # ch1読み出しコマンド 34 35 client.send(comand0.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 36 client.send(comand1.encode("ascii")) 37 38 response0 = client.recv(1024) 39 response1 = client.recv(1024) 40 41 response0 = response0.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 42 response1 = response1.decode("UTF-8") 43 44 response0 = float(response0)/1000 # Float型へ変換し単位をそろえる 45 response1 = float(response1)/1000 46 47 print(num," ch0 :",response0,"V"," ch1:",response1,"V") # 表示 48 df1.loc[num] =[response0,response1] 49 num +=1 50 time.sleep(0.5) # n秒ごと 51 learn_data.append([response0,response1]) 52 learn_label.append(1) 53 54else: 55# client.close() 56 print("異常データ入力:エンターを押すと教師データが入力される") 57 input_data = input() 58 while num < 20 : 59 60 comand0 = "RD DM10102.D\r" # ch0読み出しコマンド 61 comand1 = "RD DM10112.D\r" # ch1読み出しコマンド 62 63 client.send(comand0.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 64 client.send(comand1.encode("ascii")) 65 66 response0 = client.recv(1024) 67 response1 = client.recv(1024) 68 69 response0 = response0.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 70 response1 = response1.decode("UTF-8") 71 72 response0 = float(response0)/1000 # Float型へ変換し単位をそろえる 73 response1 = float(response1)/1000 74 75 print(num," ch0 :",response0,"V"," ch1:",response1,"V") # 表示 76 df1.loc[num] =[response0,response1] 77 num +=1 78 time.sleep(0.5) # n秒ごと 79 learn_data.append([response0,response1]) 80 learn_label.append(0) 81 else: 82 client.close() 83 84 85 86client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 87# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 88client.connect((host_ip,host_port)) 89 90 91 92print("比較データ入力:エンターを押すと比較データが入力される") 93input_data = input() 94 95num =1 96 97# アルゴリズムを指定。K最近傍法を採用 98clf = KNeighborsClassifier(n_neighbors=1) 99 100# 学習用のデータと結果を学習する,fit() 101clf.fit(learn_data, learn_label) 102 103while num < 20 : # 回数分繰り返す 104 105 comand0 = "RD DM10102.D\r" # ch0読み出しコマンド 106 comand1 = "RD DM10112.D\r" # ch1読み出しコマンド 107 108 client.send(comand0.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 109 client.send(comand1.encode("ascii")) 110 111 response0 = client.recv(1024) 112 response1 = client.recv(1024) 113 114 response0 = response0.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 115 response1 = response1.decode("UTF-8") 116 117 response0 = float(response0)/1000 # Float型へ変換し単位をそろえる 118 response1 = float(response1)/1000 119 120 121 print(num," ch0 :",response0,"V"," ch1:",response1,"V") # 表示 122 df1.loc[num] =[response0,response1] 123 num +=1 124 time.sleep(0.5) # n秒ごと 125 test_data.append([response0,response1]) 126 test_label = clf.predict(test_data) 127 128else: 129 client.close() 130 131# アルゴリズムを指定。K最近傍法を採用 132 133clf = KNeighborsClassifier(n_neighbors=1) 134 135# 学習用のデータと結果を学習する,fit() 136clf.fit(learn_data, learn_label) 137 138# テストデータによる予測,predict() 139test_label = clf.predict(test_data) 140 141print(test_label)
試したこと
Kaggleで勝つ データ分析の技術 という本を読みました。
補足情報(FW/ツールのバージョンなど)
jupyterNotebookを使用してます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/12 05:15
2021/02/12 05:37
2021/02/12 10:59 編集
2021/02/13 08:43