如何修复SVM模型中PCA与SVC代码的两类NameError错误?
问题解决:SVM模型中的两个NameError错误
错误1:NameError: name 'x_train' is not defined
问题原因
代码通过train_test_split划分数据集时,定义的训练集特征变量是大写的X_train,但后续PCA转换时误写为小写的x_train;同时划分得到的训练标签是Y_train,拟合分类器时却用了未定义的y_train,且classifier变量未提前初始化。
修复方案
- 将PCA转换代码中的
x_train替换为X_train - 将分类器拟合代码中的
y_train替换为Y_train - 在使用
classifier前,先初始化SVM分类器
错误2:NameError: name 'svm' is not defined
问题原因
代码导入SVC的方式是from sklearn.svm import SVC,直接导入了SVC类而非svm模块,因此无法通过svm.SVC调用类。
修复方案
二选一即可:
- 方案1:直接使用导入的
SVC类,将model = svm.SVC(kernel='linear')改为model = SVC(kernel='linear') - 方案2:修改导入语句为
import sklearn.svm as svm,保留model = svm.SVC(kernel='linear')
关键修正后的代码片段
# ... 前面代码不变 ... # 划分训练集和测试集 X_train, x_test, Y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0) # 提前初始化分类器 classifier = SVC() print(X_train.shape) print(Y_train.shape) from sklearn.decomposition import PCA pca = PCA(n_components=3) # 修正训练集变量名 x_train_pca = pca.fit_transform(X_train) x_test_pca = pca.transform(x_test) # 修正训练标签变量名 classifier.fit(x_train_pca, Y_train) predictions = classifier.predict(x_test_pca) accuracy = classifier.score(x_test_pca, y_test) print("Accuracy:", accuracy) # 处理二分类问题 X = X[np.logical_or(Y==0,Y==1)] Y = Y[np.logical_or(Y==0,Y==1)] # 修正SVC调用方式 model = SVC(kernel='linear') clf = model.fit(X, Y) # ... 后面代码不变 ...
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

