Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 在未使用某些功能的情况下重新安装保存的scikit学习模型-“;ValueError:给定列不是dataframe的列;_Python_Scikit Learn_Pipeline_Training Data - Fatal编程技术网

Python 在未使用某些功能的情况下重新安装保存的scikit学习模型-“;ValueError:给定列不是dataframe的列;

Python 在未使用某些功能的情况下重新安装保存的scikit学习模型-“;ValueError:给定列不是dataframe的列;,python,scikit-learn,pipeline,training-data,Python,Scikit Learn,Pipeline,Training Data,我需要使用更小的数据集重新拟合scikit学习管道,而不需要模型实际不使用的一些特性 (实际情况是,我正在通过joblib保存它,并将其加载到另一个文件中,我需要在其中重新拟合,因为它包含我制作的一些自定义变压器,但添加所有功能将是一件痛苦的事情,因为它是一种不同类型的模型。然而,这并不重要,因为如果我在保存之前重新拟合模型,也会发生同样的错误n我第一次训练它的同一个文件) 这是我的定制变压器: class TransformAdaptionFeatures(BaseEstimator,Tran

我需要使用更小的数据集重新拟合scikit学习管道,而不需要模型实际不使用的一些特性

(实际情况是,我正在通过joblib保存它,并将其加载到另一个文件中,我需要在其中重新拟合,因为它包含我制作的一些自定义变压器,但添加所有功能将是一件痛苦的事情,因为它是一种不同类型的模型。然而,这并不重要,因为如果我在保存之前重新拟合模型,也会发生同样的错误n我第一次训练它的同一个文件)

这是我的定制变压器:

class TransformAdaptionFeatures(BaseEstimator,TransformerMixin):
定义初始化(自):
通过
def配合(自身、X、y=无):
回归自我
def变换(自,X):
采用功能=X列
feats_munic=[采用中的feat for feat_特征,如果feat中的'u munic'
feats_adj_neigh=[采用功能中的feat for feat
如果专长中的“_adj”]
feats\u port=[如果feat中有'\u port',则feat for feat in adoption\u功能]
专长保持所有=专长城市+专长邻里+专长港口
专长到技能保留=[专长到技能保留中的专长到技能
如果“tot_cumul”不在壮举中]
返回X[专长保留]
这是我的管道:

full_pipeline=管道([
('transformer',TransformAdaptionFeatures()),
('scaler',StandardScaler())
])
模型=管道([
(“准备”,整个管道),
(“回归器”,ml_模型)
])
其中,
ml\u模型
为scikit学习机器学习模型。保存
模型时,
完整管道
ml\u模型
都已安装。(在实际模型中,有一个
ColumnTransformer
中间步骤,表示实际的
完整管道
,因为我需要为不同的列使用不同的转换器,但为了简洁起见,我只复制了重要的一个)

问题:我减少了数据集中已用于匹配所有内容的功能的数量,删除了
TransformAdaptionFeatures()
中未考虑的一些功能(它们不会进入要保留的功能中)。然后,我尝试用减少的功能将模型重新匹配到新数据集,但出现以下错误:

回溯(最近一次呼叫最后一次):
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\pandas\core\index\base.py”,第2889行,在get\u loc中
返回自我。引擎。获取定位(铸造钥匙)
文件“pandas\\ libs\index.pyx”,第70行,在pandas.\ libs.index.IndexEngine.get\ loc中
pandas.\u libs.index.IndexEngine.get\u loc中第97行的文件“pandas\\u libs\index.pyx”
pandas.\u libs.hashtable.PyObjectHashTable.get\u项中第1675行的文件“pandas\\u libs\hashtable\u class\u helper.pxi”
pandas.\u libs.hashtable.PyObjectHashTable.get\u项中的第1683行文件“pandas\\u libs\hashtable\u class\u helper.pxi”
关键错误:“tot_cumul_adoption_pr_y_munic”
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\utils\ \uuuu init\uuu.py”,第447行,在“获取”列中
col\u idx=所有列。获取位置(col)
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\pandas\core\index\base.py”,第2891行,在get\u loc中
从err中升起钥匙错误(钥匙)
关键错误:“tot_cumul_adoption_pr_y_munic”
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“C:\Users\giaco\sbp abm\uscilities\u abm\test.py”,第15行,在
modelSBP=model.sbpadpoption(初始年=开始年)
文件“C:\Users\giaco\sbp abm\urbities\u abm\urbities\u abm\model.py”,第103行,在\uuu init中__
自我上传\u ml\u模型(ml\u clsf\u文件夹、ml\u regr\u文件夹)
文件“C:\Users\giaco\sbp abm\musticilities\u abm\musticilities\u abm\model.py”,第183行,in\u upload\u ml\u models
self.\u ml\u clsf.fit(clsf\u dataset.drop('采用年',轴=1),
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\pipeline.py”,第330行,适合
Xt=自拟合(X,y,**拟合参数步数)
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\pipeline.py”,第292行,格式为
十、 fitted_transformer=fit_transform_one_(
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\joblb\memory.py”,第352行,在调用中__
返回self.func(*args,**kwargs)
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\pipeline.py”,第740行,在fit\u transform\u one中
res=变换器。拟合变换(X,y,**拟合参数)
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\compose\u column\u transformer.py”,第529行,在fit\u transform中
自验证余数(X)
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\compose\\u column\u transformer.py”,第327行,在“validate\u”中
cols.extend(_get_column_index(X,columns))
文件“C:\Users\giaco\anaconda3\envs\mesa\u geo\u ml\lib\site packages\sklearn\utils\\uuuu init\uuuu.py”,第454行,在“获取”列中
升值误差(
ValueError:给定列不是数据帧的列

我不明白这个错误是由于什么原因造成的,我以为scikit learn没有存储我通过的列的名称。

我发现了我的错误,它实际上是在使用
ColumnsTransformer
,这也是列名输入的唯一位置


我的错误非常简单,我只是没有更新列列表以应用每个转换来删除被排除的功能的名称。

我发现了我的错误,实际上是在使用
ColumnsTransformer
,这也是列名输入的唯一位置

我的错误