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

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