使用UCI心脏病数据集结合前向特征选择与KNN时遇InvalidIndexError
InvalidIndexError 错误原因及解决办法
这个错误本质是数据索引方式不匹配,大概率是你在处理Pandas DataFrame和Numpy数组时混用了索引规则,或者特征选择过程中数据维度出了问题。下面是几种常见场景和修复方案:
1. 误用DataFrame的索引方式
如果你的特征矩阵X是Pandas DataFrame,直接用Numpy的[:, [0]]切片会触发错误——DataFrame不支持这种二维数组式的索引。
- 错误写法:
X_selected = X[:, [0]] # DataFrame不接受这种索引 - 正确写法:
- 按列位置索引:用
ilocX_selected = X.iloc[:, [0]] # 选择第0列,返回二维DataFrame - 按列名索引:直接传入列名字符串列表
X_selected = X[['age']] # 假设第0列是age
- 按列位置索引:用
2. 特征选择后数据维度不匹配
当你只选择了一个特征时,数据可能变成一维数组(形状为(n_samples,)),但KNN的fit和predict方法要求输入是二维数组(形状为(n_samples, n_features))。
- 错误场景:
selected_features = [0] X_train_subset = X_train.iloc[:, selected_features].values.ravel() # 转成了一维数组 knn.fit(X_train_subset, y_train) # 报错 - 修复方案:用
reshape转成二维X_train_subset = X_train.iloc[:, selected_features].values.reshape(-1, 1) knn.fit(X_train_subset, y_train)
3. 特征列表维护错误
前向选择过程中,如果不小心把特征索引写成了嵌套列表(比如[[0]]而非[0]),索引时会触发维度错误。
- 错误写法:
selected_features = [] selected_features.append([0]) # 变成了嵌套列表[[0]] X_selected = X_train.iloc[:, selected_features] # 索引错误 - 正确写法:
selected_features.append(0) # 保持一维列表[0]
修正后的代码片段示例
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split # 加载UCI心脏病数据集 data = pd.read_csv('heart.csv') X = data.drop('target', axis=1) y = data['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 前向特征选择流程 selected_features = [] best_acc = 0 # 遍历所有特征,逐一尝试添加 for col in X_train.columns: temp_features = selected_features + [col] # 提取特征子集(始终保持二维) X_train_temp = X_train[temp_features] X_test_temp = X_test[temp_features] # 训练KNN并评估 knn = KNeighborsClassifier(n_neighbors=5) knn.fit(X_train_temp, y_train) current_acc = knn.score(X_test_temp, y_test) # 更新最优特征集合 if current_acc > best_acc: best_acc = current_acc selected_features = temp_features # 最终模型训练与预测 final_knn = KNeighborsClassifier(n_neighbors=5) final_knn.fit(X_train[selected_features], y_train) y_pred = final_knn.predict(X_test[selected_features])
内容的提问来源于stack exchange,提问作者sandeepa
相关产品推荐
相关产品推荐

