You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

贷款预测系统报错:X无有效特征名但SVC拟合时含特征名

问题描述

搭建贷款数据集预测系统时,前期流程正常,但执行预测操作时出现以下警告:

/usr/local/lib/python3.8/dist-packages/sklearn/base.py:450: UserWarning: X does not have valid feature names, but SVC was fitted with feature names
warnings.warn("

对应的代码如下:

#importing the dependencies 
import numpy as np
import pandas as pd 
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler

#importing the dataset to pandas
loan_dataset= pd.read_csv('/content/train_u6lujuX_CVtuZ9i (1).csv')

#printing the first five rows of the dataset
loan_dataset.head()

#statistical measures
loan_dataset.describe() 
#number of values missing in each column
loan_dataset.isnull().sum()

#dropping missing values
loan_dataset= loan_dataset.dropna() 
#number of values missing in each column
loan_dataset.isnull().sum() 
#label_Encoding
loan_dataset.replace({"Loan_Status": {"N":0,"Y":1}},inplace=True) 
#Dependent column values
loan_dataset['Dependents'].value_counts() 
#replacing the value of 3+ to 4
loan_dataset= loan_dataset.replace(to_replace='3+', value=4) 
#Education & Loan Status
sns.countplot(x="Education",hue="Loan_Status", data= loan_dataset) 
#marital status and loan status
sns.countplot(x="Married",hue="Loan_Status", data= loan_dataset)

#convert categorical columns to numerical values
loan_dataset.replace({'Married':{'No':0,'Yes':1},'Gender':{'Male':1,'Female':0},'Self_Employed':{'No':0,'Yes':1},
'Property_Area':{'Rural':0,'Semiurban':1,'Urban':2},'Education':{'Graduate':1,'Not Graduate':0}},inplace=True)

#seperating the data and label
X= loan_dataset.drop(columns=["Loan_ID","Loan_Status"],axis=1)
Y= loan_dataset["Loan_Status"]
print(X)
print(Y)

#training the dataset
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.1,stratify=Y,random_state=3)

#importing the support vector algorithm
classifier= svm.SVC(kernel="linear")

#training the support vector machine model
classifier.fit(x_train,y_train)

#accuracy Score on training data
x_train_prediction= classifier.predict(x_train)
training_data_accuracy= accuracy_score(x_train_prediction,y_train)

print("Accuracy on training data:", training_data_accuracy)

#accuracy score on training data
x_test_prediction = classifier.predict(x_test)
test_data_accuray = accuracy_score(x_test_prediction,y_test)

print('Accuracy on test data : ', test_data_accuray)

#making a Predictive System
input_data= (1,1,1,1,0, 4583,1508.0,128.0,360.0,1.0,0)

#changing the input data to numpy array
input_data_as_numpy_array= np.asarray(input_data)

#reshaping the array as we are predicting for one instance
input_data_reshaped= input_data_as_numpy_array.reshape(1,-1)

data= input_data_reshaped

prediction= classifier.predict(data)
问题原因与解决方案

原因

你的SVM模型是用带特征名称的DataFrame(x_train)训练的,但预测时传入的是没有特征名称的numpy数组,sklearn检测到这种特征标识的不一致,所以抛出警告。

解决方案

有两种可行的解决方式:

方法1:将输入数据转为带特征名称的DataFrame(推荐)

利用训练集x_train的列名,把输入数组包装成DataFrame,确保特征名称和训练时完全一致,同时还能避免因特征顺序错误导致的预测偏差:

# 替换原预测部分的代码
input_data= (1,1,1,1,0, 4583,1508.0,128.0,360.0,1.0,0)
# 用训练集的列名创建DataFrame
input_df = pd.DataFrame([input_data], columns=x_train.columns)
prediction= classifier.predict(input_df)

方法2:关闭警告(不推荐,仅临时用)

如果你能100%确认输入特征的顺序和训练集完全一致,只是不想看到警告,可以添加代码屏蔽该提示:

import warnings
warnings.filterwarnings("ignore", message="X does not have valid feature names")

内容的提问来源于stack exchange,提问作者Mutale Mwango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:15:42