###### tags: `面談` # 210608_面談本田 ### 進捗 - Weka導入 - 分類 --- ### 目標の確認 - 最終目標: - n人の患者データのうち,n-k人のデータを用いて学習し,k人の未知データの重症度を識別する - 当面の目標 - 先方に識別できそうなのか示す - → 1人の患者データを用いて,学習し,同じ患者のデータを識別する --- 指先画像の例 ![](https://i.imgur.com/isaBwu6.png) ### 実験1 【データセット】 患者1のブレがない良好な全画像 ・重症度0:4日分 → 32指先画像 ・重症度1:16日分 → 128指先画像 ・10回の交差検証・平均 || a | b | |--| ----|---- | |a| 20 |12 | |b| 3 |125 | (a=重症度0,b=重症度1) 正解率:90.625% 145/160 重症度0の指先画像に対して,3/20の画像で誤判定 重症度1の指先画像に対して,12/125の画像で誤判定 #### 考察 同じ画像の別の指先が学習データに含まれているので良好な結果になった? --- ### 実験2 【データセット】 学習 ・重症度0:3日分 ・重症度1:14日分 テスト ・重症度0:1日分 ・重症度1:2日分 || a | b | |--| ----|---- | |a| 5 |3 | |b| 0 |16 | (a=重症度0,b=重症度1) 正解率:87.5% 21/24 重症度0の指先画像3枚に対して,「1」と誤判定 #### 考察 重症度0の画像が4日分しかなく,データに偏りがあるため どう評価すべきか分からない ### 今後の課題 - 16色パッチ色補正の実装,比較 - 特徴量検討 <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> ### MEMO - Weka で classは数値じゃなくて,Nomial 文字列にしないと精度出してくれない - 指数表示を止める ``` # Wekaで使用できるデータを構築する # # csv → arff に変換 # # 【arffの構成】 # @relation keyboard データセット名:なんでもいい # # @attribute time real 属性名:数値 # @attribute speed real # @attribute angle real # @attribute curve real # @attribute emotion {sad, happy} 属性名:数値じゃないので,その区別をここに記す # 最後の欄に,分類したいもの # # @data 実際のデータ,並びは上で指定した順番にする # 1,0.1,46,1.81,sad # 2,0.6,187,4.7,happy # # # import csv import os fileToRead = "../P3.csv" #読み込むcsv fileToWrite = os.path.splitext(fileToRead)[0] +".arff" #出力arff名 relation = "HFSdataset" #how you'll like to call your relation as. dataType = [] # Stores data types 'nominal' and 'numeric' columnsTemp = [] # Temporary stores each column of csv file except the attributes uniqueTemp = [] # Temporary Stores each data cell unique of each column uniqueOfColumn = [] # Stores each data cell unique of each column dataTypeTemp = [] # Temporary stores the data type for cells on each column finalDataType = [] # Finally stores data types 'nominal' and 'numeric' attTypes = [] # Stores data type 'numeric' and nominal data for attributes p = 0 # pointer for each cell of csv file writeFile = open(fileToWrite, 'w') #Opening and Reading a CSV file f = open(fileToRead, 'r') reader = csv.reader(f) allData = list(reader) attributes = allData[0] totalCols = len(attributes) totalRows = len(allData) f.close() # Add a '0' for each empty cell for j in range(0,totalCols): for i in range(0,totalRows): if 0 == len(allData[i][j]): allData[i][j] = "0" # check for comams or blanks and adds single quotes for j in range(0,totalCols): for i in range(1,totalRows): allData[i][j] = allData[i][j].lower() if "\r" in allData[i][j] or '\r' in allData[i][j] or "\n" in allData[i][j] or '\n' in allData[i][j]: allData[i][j] = allData[i][j].rstrip(os.linesep) allData[i][j] = allData[i][j].rstrip("\n") allData[i][j] = allData[i][j].rstrip("\r") try: if allData[i][j] == str(float(allData[i][j])) or allData[i][j] == str(int(allData[i][j])): print except ValueError as e: allData[i][j] = "'" + allData[i][j] + "'" # fin gives unique cells for nominal and numeric for j in range(0,totalCols): for i in range(1,totalRows): columnsTemp.append(allData[i][j]) for item in columnsTemp: if not (item in uniqueTemp): uniqueTemp.append(item) uniqueOfColumn.append("{" + ','.join(uniqueTemp) + "}") uniqueTemp = [] columnsTemp = [] # Assigns numeric or nominal to each cell for j in range(1,totalRows): for i in range(0,totalCols): try: if allData[j][i] == str(float(allData[j][i])) or allData[j][i] == str(int(allData[j][i])): dataType.append("numeric") except ValueError as e: dataType.append("nominal") for j in range(0,totalCols): p = j for i in range(0,(totalRows-1)): dataTypeTemp.append(dataType[p]) p += totalCols if "nominal" in dataTypeTemp: finalDataType .append("nominal") else: finalDataType .append("numeric") dataTypeTemp = [] for i in range(0,len(finalDataType )): if finalDataType [i] == "nominal": attTypes.append(uniqueOfColumn[i]) else: attTypes.append(finalDataType[i]) # Show comments writeFile.write("%\n% Comments go after a '%' sign.\n%\n") writeFile.write("%\n% Relation: " + relation +"\n%\n%\n") writeFile.write("% Attributes: " + str(totalCols) + " "*5 + "Instances: " + str(totalRows-1) + "\n%\n%\n\n") # Show Relation writeFile.write("@relation " + relation + "\n\n") # Show Attributes for i in range(0,totalCols): writeFile.write("@attribute" + " '" + attributes[i] + "' " + attTypes[i] + "\n") # Show Data writeFile.write("\n@data\n") for i in range(1,totalRows): writeFile.write(','.join(allData[i])+"\n") print(fileToWrite + " was converted to " + fileToRead) ``` ``` ['filename','class', 'aveR', 'aveG', 'aveB','midR','midG','midB', \ 'stdR','stdG','stdB','modeR','modeG','modeB', \ 'skeR','skeG','skeB', 'kurtoR','kurtoG','kurtoB', \ 'entropyR','entropyG','entropyB','contrastR','contrastG','contrastB', \ 'correlationR','correlationG','correlationB','energyR','energyG','energyB','uniformR','uniformG','uniformB'] ```