Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 StandardScaler ValueError:操作数无法与形状(75000,3)(50,)(75000,3)一起广播_Python_Scikit Learn_Deep Learning - Fatal编程技术网

Python StandardScaler ValueError:操作数无法与形状(75000,3)(50,)(75000,3)一起广播

Python StandardScaler ValueError:操作数无法与形状(75000,3)(50,)(75000,3)一起广播,python,scikit-learn,deep-learning,Python,Scikit Learn,Deep Learning,我需要规范化两种不同形状的特征向量。编写此代码后: 从sklearn导入预处理 scaler=预处理。StandardScaler() scaled_df1=scaler.fit_变换(doc2Vec) scaled_df2=scaler.transform(新向量) doc2Vec=np.0((75000,50))新向量=np.0((75000,3)) 错误是 文件“D:/PycharmProjects/THEMOTION_analysis_text/THEMOTION_analysis-m

我需要规范化两种不同形状的特征向量。编写此代码后:

从sklearn导入预处理
scaler=预处理。StandardScaler()
scaled_df1=scaler.fit_变换(doc2Vec)
scaled_df2=scaler.transform(新向量)
doc2Vec=np.0((75000,50))新向量=np.0((75000,3))

错误是

文件“D:/PycharmProjects/THEMOTION_analysis_text/THEMOTION_analysis-master/project/Word2Vec.py”,第232行,组合特征 scaled_df2=scaler.transform(新向量) 文件“D:\PycharmProjects\THEMOTION\U analysis\U text\venv\lib\site packages\sklearn\preprocessing\u data.py”,第806行,在转换中 X-=自我平均值_ ValueError:操作数无法与形状(75000,3)(50,)(75000,3)一起广播

注意,我知道我要标准化不同维度的特征向量,这正是我要做的。我如何修正代码?或者,它们应该如何标准化


帮助,请

您不能使用
标准缩放器
,因为
transform
中给出的
X
的列数应该与
fit
中给出的
X
的列数相同

基本上,在
fit
中,您学习了维度(50,)的平均值/标准偏差向量,同时您尝试将这些统计数据应用到新的
X
上,仅使用3列

因此,如果我正确理解了您希望如何规范化,您可以创建自己的scaler类:

将numpy导入为np
从sklearn.base导入BaseEstimator
从sklearn.base导入TransformerMixin
MyScaler类(TransformerMixin,BaseEstimator):
def配合(自身、X、y=无):
自身平均值=X平均值(轴=0)
self.std\u dev=X.std(轴=0)
回归自我
def变换(自、X、y=无):
返回(X-self.means_[:X.shape[1]])/self.std_udev_[:X.shape[1]]
X_train=np.random.randn(5,5)
X_检验=np.random.randn(5,2)
scaler=MyScaler()
打印(缩放、拟合、变换(X列))
打印(缩放变换(X_测试))
你会得到这样的结果:

[[-1.46691268-1.45361873-0.45377612 0.49119234-1.08791771]
[-0.21413664  0.71465686 -0.29978242  0.58696079 -0.30286673]
[ 0.5123138   0.17096286 -0.34478627 -1.44547556 -0.51613175]
[ 1.54792261 -0.76139957 -0.86188385  1.24605112  0.04787813]
[-0.37918709  1.32939857  1.96022866 -0.8787287   1.85903806]]
[[ 0.38906146  2.27223431]
[-0.340497   -0.42958738]
[-0.30017852  1.84465534]
[ 0.79533469  4.49370725]
[-0.23766821  1.8216171 ]]

模型安装在
doc2Vec=np.zeros((75000,50))
上,然后要求转换
new_vec=np.zeros((75000,3))

维度不同,因此误差增大。


为了克服这个问题,@glemaitre的回答提供了一个“自定义”定标器。

这是不可能的。如果您只想规范化
new_-vec
,那么请使用
StandardScaler
fit_-transform
的新实例对其进行规范化。@AjayDabas:如果我想规范化new_-vec,请将两者结合起来,使其成为53维的特征向量。我该怎么办?你能给我一个代码示例吗?谢谢