ACO-SVM手语识别系统报错:X含63特征,SVC预期31输入特征
解决ACO-SVM手语识别系统的特征维度不匹配报错
报错‘X has 63 features, but SVC is expecting 31 features as input’的核心问题很明确:训练SVM时用了ACO筛选出的31个特征,但预测时直接传入了完整的63维测试数据,两边特征维度对不上。
修复步骤
- 保存ACO选中的特征索引
在HybridACOSVM类中新增一个属性,专门存储训练阶段ACO选出的特征索引,确保预测时能复用同一组特征。 - 修改预测逻辑
调用predict方法时,先对测试数据做和训练阶段一样的特征筛选,再传入SVM模型进行预测。
修改后的完整代码
# Load the dataset import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC df = pd.read_csv('dataset.csv') df.columns = [i for i in range(df.shape[1])] # Split the data into features and labels X = df.iloc[:, :-1] Y = df.iloc[:, -1] # Split the data into training and testing sets x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0) # Apply feature scaling to the training and testing data scaler = StandardScaler() x_train_scaled = scaler.fit_transform(x_train) x_test_scaled = scaler.transform(x_test) # Define the ACO-SVM model class HybridACOSVM: def __init__(self, svm_params, aco_params): self.svm_params = svm_params self.aco_params = aco_params self.svm = None self.selected_features = None # 新增:存储选中的特征索引 def train(self, x_train, y_train): # Perform ACO feature selection selected_features = self.perform_aco(x_train, y_train) self.selected_features = selected_features # 保存选中的特征 # Train SVM using selected features self.svm = SVC(**self.svm_params) self.svm.fit(x_train[:, selected_features], y_train) def perform_aco(self, x_train, y_train): # Perform ACO feature selection algorithm # Your ACO algorithm implementation here # Randomly select some features as a placeholder num_features = x_train.shape[1] num_selected = int(num_features * 0.5) # Select half of the features selected_features = np.random.choice(num_features, num_selected, replace=False) return selected_features def predict(self, x_test): # Make predictions using the trained SVM model # 新增:先筛选特征,再预测 x_test_selected = x_test[:, self.selected_features] return self.svm.predict(x_test_selected) # Set the parameters for SVM and ACO svm_params = { 'C': 10, 'gamma': 0.1, 'kernel': 'rbf' } aco_params = { # Parameters for the ACO algorithm # Adjust these parameters according to your implementation } # Train the hybrid ACO-SVM model hybrid_model = HybridACOSVM(svm_params, aco_params) hybrid_model.train(x_train_scaled, y_train) # Make predictions on the test set y_pred = hybrid_model.predict(x_test_scaled)
关键修改点标注
- 在
HybridACOSVM的__init__方法中添加self.selected_features = None - 在
train方法中把ACO选出的selected_features赋值给self.selected_features - 在
predict方法中先对测试数据做特征筛选x_test_selected = x_test[:, self.selected_features],再传入SVM预测
内容的提问来源于stack exchange,提问作者Iorolun Emmanuel
相关产品推荐
相关产品推荐

