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维的特征向量。我该怎么办?你能给我一个代码示例吗?谢谢