NoML_Classification
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import ast
data = pd.read_csv('output7.csv')
filtered_data = data[data['Label'].str.contains('Touch')]
#print(filtered_data['Label'].unique())
data = filtered_data
scaler = StandardScaler()
sensor_columns = [col for col in data.columns if 'Channel' in col]
#print(data.columns)
# third number in sensor columns
for col in sensor_columns:
data[col] = data[col].apply(lambda x: ast.literal_eval(x)[2] if isinstance(x, str) else x[2])
data[sensor_columns] = scaler.fit_transform(data[sensor_columns])
# avg vectors for each 'Touch' type
touch_averages = {
label: data[data['Label'] == label][sensor_columns].mean()
for label in ['Top_Left_Quadrant_Touch', 'Top_Right_Quadrant_Touch',
'Bottom_Left_Quadrant_Touch', 'Bottom_Right_Quadrant_Touch', 'Center_Touch']
}
def classify_touch(row, touch_averages):
min_dist = float('inf')
classification = None
for label, avg in touch_averages.items():
dist = np.linalg.norm(row - avg)
if dist < min_dist:
min_dist = dist
classification = label
return classification
data['Heuristic_Label'] = data[sensor_columns].apply(lambda row: classify_touch(row, touch_averages), axis=1)
matches = (data['Label'] == data['Heuristic_Label']).sum()
total = data.shape[0]
accuracy = matches / total
print(f'Heuristic Accuracy: {accuracy:.2%}')
Heuristic Accuracy: 67.71%
Graphing the results
import matplotlib.pyplot as plt
import seaborn as sns
# Calculate accuracies for each label
label_accuracies = {}
for label in touch_averages.keys():
label_data = data[data['Label'] == label]
matches = (label_data['Label'] == label_data['Heuristic_Label']).sum()
total = label_data.shape[0]
label_accuracies[label] = matches / total
# Plot accuracies for each label
plt.figure(figsize=(10, 6))
sns.barplot(x=list(label_accuracies.keys()), y=list(label_accuracies.values()))
plt.title('Accuracy for Each Label')
plt.ylabel('Accuracy')
plt.xlabel('Label')
plt.xticks(rotation=45)
plt.show()
# Calculate average sensor values for each label
average_sensor_values = data.groupby('Label')[sensor_columns].mean().T
# Plot average sensor values for each label
plt.figure(figsize=(14, 8))
sns.heatmap(average_sensor_values, annot=True, fmt=".2f", cmap="coolwarm")
plt.title('Average Sensor Values for Each Label')
plt.ylabel('Sensor')
plt.xlabel('Label')
plt.show()
![Accuracy_per_Label.png](/docs/resources/attachments/accuracy-per-label.png)
![AVG_sensor.png](/docs/resources/attachments/avg-sensor.png)
# Calculate the count of instances for each label
label_counts = data['Label'].value_counts()
# Plot the counts for each label
plt.figure(figsize=(10, 6))
sns.barplot(x=label_counts.index, y=label_counts.values)
plt.title('Number of Instances for Each Label')
plt.ylabel('Instances Count')
plt.xlabel('Label')
plt.xticks(rotation=45)
plt.show()
![Instances_Per_Label.png](/docs/resources/attachments/instances-per-label.png)