###### tags: `面談`
# 210608_面談本田
### 進捗
- Weka導入
- 分類
---
### 目標の確認
- 最終目標:
- n人の患者データのうち,n-k人のデータを用いて学習し,k人の未知データの重症度を識別する
- 当面の目標
- 先方に識別できそうなのか示す
- → 1人の患者データを用いて,学習し,同じ患者のデータを識別する
---
指先画像の例

### 実験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']
```