我的数据集被分割成不同的文件,因为我使用脑-计算机接口()分类所收集的脑电数据。以下是我所拥有的:
.txt文件包含16个电极的脑电信号数据,在256 of下持续2秒。因此,它是一个512 x 16 (+1列的类)矩阵。.txt文件代表一个类。因此,每个文件都类似于:user_1_class_1.txt、user_1_class_2等。我正在使用scikit-learn MLPClassifier对这些数据进行分类,但我的第一次实验完全出错了。经过一些研究,我注意到在BCI问题中,我们必须将整个文件作为样本呈现给分类器。
这听起来有点让我困惑,我知道数据是时间依赖的。我很乐意解释一下如何组织数据和为MLPClassifier提供信息。
发布于 2020-02-20 14:59:00
我会亲自把所有的文件读入熊猫的数据中,做任何类似的清理或处理,然后用拟合法传递基本的矩阵进行实际的训练。我不认为这有你担心的那么难--看看这里的例子吧。
您需要有一个样本作为一个具有形状512 x 16的训练矩阵和一个验证矩阵(我理解)是一个单一值,即类,它对所有行的脑电数据重复相同的值。它也匹配存储在文件名中的类名,对吗?
您将有180个样本(每个文件一个)。您可以使用train_test_split和sklearn将它们拆分为训练和验证。
# imports
import os
import pandas as pd
from sklearn.model_selection import train_test_split
# List all files, stored e.g. in the folder called "data"
files = sorted([file for file in os.listdir("./data/") if f.endswith(".txt")])
# Read into pandas - might need to adapt based on structure of your txt files
dfs = [pd.read_csv(f) for f in files]
# Do any required cleaning on each dataframe - func takes and returns a df
clean_dfs = [func(df) for df in dfs]现在使用dataframe .values属性获取矩阵:
data = [df.values[:, 0:-1] for df in clean_dfs] # take all but final column (the label)
labels = [df.values[0, -1] for df in clean_dfs] # take first items in class column现在您可以创建火车/val拆分:
X_tr, X_te, y_tr, y_te = create_train_test_split(data, values, test_size=0.2)这些现在可以传递到分类器的fit方法~
from sklearn.metrics import accuracy_score, confusion_matrix
clf = MLPClassifier() # define the classifier
clf.fit(X_tr, y_tr) # train the classifier
predictions = clf.predict(X_te) # make predictions on the test set您可以计算一些指标,如准确度评分:
score = accuracy_score(y_te, predictions)https://datascience.stackexchange.com/questions/68411
复制相似问题