我在所有的例子中都看到人们首先创建一个类的实例:
ss = StandardScaler()
并且仅在此之后使用实例中的方法:ss.fit_transform(df)
,而不是调用类本身的方法:StandardScaler().fit_transform(df)
这是因为:
谢谢你的回答,提出了许多澄清的观点,以下是我理解的一些观点。如果我弄错了,请纠正我
有些情况下会抛出错误。
有些情况不会抛出错误,但会产生不同的结果(可怕!)
如果只使用了一次,则可以调用类本身。
最好在一行代码中只做一件事。
美学与美学;意见
还有其他原因,请告诉我强>
np.random.default_rng(0).integers(10, size=(4,5))
import numpy as np
from sklearn.preprocessing import StandardScaler
# Here I'm using .interegs() without making an instance first
int_array1 = np.random.default_rng(0).integers(10, size=(4,5))
# Here I'm using .interegs() without making an instance first
int_array2 = StandardScaler().fit_transform(int_array1)
# This time instantiating before using for comparison
rng = np.random.default_rng(0)
int_array3 = rng.integers(10, size=(4,5))
ss = StandardScaler()
int_array4 = ss.fit_transform(int_array3)
print(int_array1)
print(int_array2)
print(int_array3)
print(int_array4)
无论实例化如何,输出都具有相同的结果
[[8 6 5 2 3]
[0 0 0 1 8]
[6 9 5 6 9]
[7 6 5 5 9]]
[[ 0.88354126 0.22941573 0.57735027 -0.72760688 -1.70856429]
[-1.68676059 -1.60591014 -1.73205081 -1.21267813 0.30151134]
[ 0.2409658 1.14707867 0.57735027 1.21267813 0.70352647]
[ 0.56225353 0.22941573 0.57735027 0.72760688 0.70352647]]
[[8 6 5 2 3]
[0 0 0 1 8]
[6 9 5 6 9]
[7 6 5 5 9]]
[[ 0.88354126 0.22941573 0.57735027 -0.72760688 -1.70856429]
[-1.68676059 -1.60591014 -1.73205081 -1.21267813 0.30151134]
[ 0.2409658 1.14707867 0.57735027 1.21267813 0.70352647]
[ 0.56225353 0.22941573 0.57735027 0.72760688 0.70352647]]
这只是为了防止代码重复和美观。写
ss.fit_transform(df)
比写StandardScaler().fit_transform(int_array1)
更简单。最后,这是课程的主要目的有两种类型的方法:类方法和(普通、实例)方法
只有类方法可以在没有实例(该类的对象)的情况下调用
即使这个-
ss = StandardScaler()
在您看来是空的,它也不是空的,它只是使用默认值作为参数。但它是可定制的,并且您可以有多个在其功能上稍有不同的定标器在对象的情况下,一些东西可以存储在调用之间,这里也是这样-例如Scaler存储它看到的样本数,并在partial_fit (click for StandardScaler.partial_fit source code)中返回
self
(可能允许方法链接)这个答案更多的是从一个普通问题的角度来回答。我不认为你的问题与你发布的代码有任何关系
考虑一下这样一个例子,您有一个函数定义,它需要用于不同的目的,如果您没有类,您就无法实现它。 类有助于实现init的目的以及变量的作用域
最重要的是,这是一种良好的设计方法,也有助于调试
相关问题 更多 >
编程相关推荐