Pandas DataFrame在预测时同样需要传入一个带有相同特征名称的数据框

问题

修改前的代码

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

music_data=pd.read_csv("music.csv")
X= music_data.drop(columns=['genre'])
y=music_data['genre']
model=DecisionTreeClassifier()
model.fit(X,y)
predictions=model.predict([  [21,1],[22,0]  ])
predictions

修改后的代码

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

music_data=pd.read_csv("music.csv")
X= music_data.drop(columns=['genre'])
y=music_data['genre']
model=DecisionTreeClassifier()
model.fit(X,y)
pred_data=pd.DataFrame([ [21,1],[22,0]],columns=X.columns )
#predictions=model.predict([  [21,1],[22,0]  ])
predictions=model.predict(pred_data)
predictions

在提供的代码中,出现了上面提到的警告,原因是 model.predict() 方法传入了一个没有特征名称列表 [ [21, 1], [22, 0] ],但模型在训练时是使用 Pandas DataFrame(包含特征名称的表格数据)进行的。

详细原因:

  • 在模型训练时 (model.fit(X, y)),你使用的是 Pandas DataFrame 对象 X,它包含了列名称(即特征名称)。
  • 但是,在预测时,你传入了一个二维的 列表 [[21, 1], [22, 0]],它没有任何特征名称(只是数据值)。这导致 scikit-learn 发出了警告,因为它期望预测数据也包含与训练数据相同的特征名称。

解决方案:

要解决这个问题,你需要在预测时使用与训练时相同的数据结构,特别是 Pandas DataFrame,并确保它有与训练数据一致的特征名称。下面是修改后的代码:

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# 加载数据
music_data = pd.read_csv("music.csv")
X = music_data.drop(columns=['genre'])
y = music_data['genre']

# 训练模型
model = DecisionTreeClassifier()
model.fit(X, y)

# 创建预测数据,并确保它是一个包含特征名称的 DataFrame
pred_data = pd.DataFrame([[21, 1], [22, 0]], columns=X.columns)

# 进行预测
predictions = model.predict(pred_data)
print(predictions)

解释:

  1. pred_data = pd.DataFrame([[21, 1], [22, 0]], columns=X.columns)

    • 这里将预测数据封装成一个 Pandas DataFrame,并确保它的列名称与训练数据 X 中的列名称一致(通过 X.columns 获得)。
  2. 这样,model.predict(pred_data) 就不会再出现警告,因为预测数据包含了与训练数据相同的特征名称。

总结:

在训练模型时,如果使用的是带有特征名称的 Pandas DataFrame,在预测时同样需要传入一个带有相同特征名称的数据框。否则,模型会发出警告,提醒传入的数据格式与训练时不一致。

相关推荐
橙露21 小时前
从零基础到实战:Python 数据分析三剑客(Pandas+NumPy+Matplotlib)核心应用指南
python·数据分析·pandas
清水白石0082 天前
手写超速 CSV 解析器:利用 multiprocessing 与 mmap 实现 10 倍 Pandas 加速
python·pandas
Hello.Reader4 天前
PyFlink 向量化 UDF(Vectorized UDF)Arrow 批传输原理、pandas 标量/聚合函数、配置与内存陷阱、五种写法一网打尽
python·flink·pandas
Hello.Reader4 天前
PyFlink Table API Data Types DataType 是什么、UDF 类型声明怎么写、Python / Pandas 类型映射一文搞懂
python·php·pandas
Hello.Reader4 天前
PyFlink Table API 用户自定义函数(UDF)通用 UDF vs Pandas UDF、打包部署、open 预加载资源、读取作业参数、单元测试
log4j·pandas
海棠AI实验室4 天前
第十六章:小项目 2 CSV → 清洗 → 统计 → 图表 → 报告输出
pandas
逻极5 天前
数据分析项目:Pandas + SQLAlchemy,从数据库到DataFrame的丝滑实战
python·mysql·数据分析·pandas·sqlalchemy
海棠AI实验室5 天前
第十七章 调试与排错:读懂 Traceback 的方法论
python·pandas·调试
kong79069285 天前
Pandas简介
信息可视化·数据分析·pandas
爱喝可乐的老王5 天前
数据分析实践--数据解析购房关键
信息可视化·数据分析·pandas·matplotlib