Python 如何使用xgboost模型对数据帧中的一行进行预测?
我正在将Python 如何使用xgboost模型对数据帧中的一行进行预测?,python,pandas,xgboost,Python,Pandas,Xgboost,我正在将xgboost模型与存储在数据帧中的一些数据进行拟合。拟合之后,我想在dataframe的一行上运行分类器/回归器的.predict方法 from sklearn.datasets import load_iris import xgboost # Load iris data such that X is a dataframe X, y = load_iris(return_X_y=True, as_frame=True) clf = xgboost.XGBClassifier(
xgboost
模型与存储在数据帧中的一些数据进行拟合。拟合之后,我想在dataframe的一行上运行分类器/回归器的.predict方法
from sklearn.datasets import load_iris
import xgboost
# Load iris data such that X is a dataframe
X, y = load_iris(return_X_y=True, as_frame=True)
clf = xgboost.XGBClassifier()
clf.fit(X, y)
# Predict for all rows - works fine
y_pred = clf.predict(X)
# Predict for single row. Crashes.
# Error: '('Expecting 2 dimensional numpy.ndarray, got: ', (4,))'
secondrow = X.iloc[1]
secondpred = clf.predict(secondrow)
下面是一个最小的示例,它预测在完整数据帧上运行良好,但在仅在数据帧的第二行上运行时崩溃
from sklearn.datasets import load_iris
import xgboost
# Load iris data such that X is a dataframe
X, y = load_iris(return_X_y=True, as_frame=True)
clf = xgboost.XGBClassifier()
clf.fit(X, y)
# Predict for all rows - works fine
y_pred = clf.predict(X)
# Predict for single row. Crashes.
# Error: '('Expecting 2 dimensional numpy.ndarray, got: ', (4,))'
secondrow = X.iloc[1]
secondpred = clf.predict(secondrow)
错误
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
11#错误:'('期望二维numpy.ndarray,got:',(4,)'
12第二行=X.iloc[1]
--->13 secondpred=clf.predict(第二行)
e:\Anaconda3\envs\py37\lib\site packages\xgboost\sklearn.py in predict(自我、数据、输出边距、ntree限制、验证功能)
789输出裕度=输出裕度,
790 ntree_极限=ntree_极限,
-->791验证\u功能=验证\u功能)
792如果输出_裕度:
793#如果输出边距处于活动状态,只需返回分数即可
e:\Anaconda3\envs\py37\lib\site packages\xgboost\core.py in predict(自我、数据、输出裕度、ntree\u限制、pred\u leaf、pred\u contribs、近似contribs、pred\u交互、验证\u功能)
1282
1283如果验证功能:
->1284自我验证功能(数据)
1285
1286长度=c_bst_ulong()
e:\Anaconda3\envs\py37\lib\site packages\xgboost\core.py in\u validate\u features(self,data)
1688
1689提升值错误(消息格式(self.feature_名称,
->1690数据。特征(名称)
1691
1692 def get_split_value_直方图(自身、特征、fmap=''、bins=None、as_=True):
ValueError:特征名称不匹配:[“萼片长度(cm)”,“萼片宽度(cm)”,“花瓣长度(cm)”,“花瓣宽度(cm)”['f0',f1',f2',f3']
输入数据中的预期花瓣长度(cm)、花瓣宽度(cm)、萼片长度(cm)、萼片宽度(cm)
培训数据没有以下字段:f1、f3、f0、f2
根据模型predict
期望一个特定形状的数组fit
- 问题是,
是一个一维的secondrow
,它与模型的形状不匹配pandas.Series
X.iloc[1]
萼片长度(厘米)4.9
萼片宽度(厘米)3.0
花瓣长度(厘米)1.4
花瓣宽度(厘米)0.2
名称:1,数据类型:float64
#看看这个阵列
X.iloc[1]。值
数组([4.9,3,1.4,0.2])#注意这是一个一维数组
#看这个形状
secondrow.values.shape
(4,)
- 通过以正确的形状传递数据(即二维数组),可以查看单行
- 将系列选择转换为数据帧,并将其转换为
的正确形状.predict
secondrow=pd.DataFrame(X.iloc[1]).T
萼片长(厘米)萼片宽(厘米)花瓣长(厘米)花瓣宽(厘米)
1 4.9 3.0 1.4 0.2
#将secondrow视为数组
第二行。值
数组([[4.9,3,1.4,0.2]])#注意这是一个二维数组
#看这个形状
secondrow.values.shape
(1, 4)
#预测
secondpred=clf.predict(第二行)
#结果
数组([0])