如何正确使用小波变换进行特征提取?

数据挖掘 机器学习 分类 scikit-学习 支持向量机 多类分类
2022-02-22 09:35:06

我正在尝试使用支持向量机作为我的模型基于 EMG 信号对单词进行分类。我的数据集包括 15 个类(单词),每个类有 230 次重复和 1000 个特征。我已经将所有文件合并在一起以使其更容易。我使用的预处理步骤是标准缩放器和主成分分析。然而,我得到的准确率只有 56%。我在网上发现使用小波变换将有助于改善这一点,但反而使情况变得更糟。我的准确率只有 6% 左右!如果你知道我做错了什么,你能给我解释一下吗?我在下面附上了我的代码。我也是机器学习的初学者,所以如果你有时间,如果你能给出详细的答案会很有帮助。非常感谢!!

cf = pd.read_csv('EMG-TrainTestDataset.csv')

# Define input and output
X = cf.drop(axis=0, columns=['WORD'])
Y = cf.WORD

# Split into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.1,random_state=82)

#Apply CWT for feature extraction
coeff, freqs = pywt.cwt(X_train,100,'gaus8')
X_train = np.array(coeff).transpose(2,0,1).reshape(-1,X_train.shape[1])

coeff, freqs = pywt.cwt(X_test,100,'gaus8')
X_test = np.array(coeff).transpose(2,0,1).reshape(-1,X_test.shape[1])

# Standardizing the features
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

#Apply Dimensionalitty reduction
pca = PCA()
X_train =pca.fit_transform(X_train)
X_test = pca.transform(X_test)

#Create Model
model = SVC(kernel="linear",gamma=1,C=1)
model.fit(X_train, y_train)

#Test using 10% testing dataset
y_pred = model.predict(X_test)
print("Accuracy:",metrics.accuracy_score(y_test, y_pred)*100)
1个回答

欢迎来到 datascience.stackexchange。

根据我coeff直接使用从小波变换返回的经验 - 确实不适用于 ml 管道。

我的实践通常包括从中提取不同的统计数据,例如:百分位数、熵、零/平均交叉点等。有创意并随机尝试它们或在网格搜索模式中尝试它们。如有疑问 - 少用多用 :)

这也会有一个很好的副作用,即降低您相对较高的维度。