Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用xgboost模型对数据帧中的一行进行预测?_Python_Pandas_Xgboost - Fatal编程技术网

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])