在尝试切片时,我注意到Python 2.7中有一个奇怪的行为:
class A:
def __getitem__(self, i):
print repr(i)
a=A()
a[:] #Prints slice(0, 9223372036854775807, None)
a[::] #prints slice(None, None, None)
a[:,:] #prints (slice(None, None, None), slice(None, None, None))
Run Code Online (Sandbox Code Playgroud)
在括号中使用单个冒号时,切片对象的开头为0,结尾为大整数.但是,当我使用多个冒号时,如果未指定,则start和stop为None.
这种行为是保证还是实现特定的?
的文档说,第二和第三壳体延伸切片,而第一种情况下则不是.但是,我找不到基本切片和扩展切片之间差异的任何明确解释.
当我覆盖__getitem__并希望接受扩展切片时,是否还有其他"特殊情况" ?
scikit-learn 建议使用pickle进行模型持久化。但是,他们注意到在使用不同版本的scikit-learn或python时,pickle的局限性。(另请参见此stackoverflow问题)
在许多机器学习方法中,仅从大数据集中学习很少的参数。这些估计的参数存储在带有下划线的属性中,例如coef_
现在我的问题是:是否 可以通过持久保存估计的属性并在以后分配它们来实现模型持久性? 对于scikit-learn中的所有估计器,此方法是否安全?对于某些估计器,是否存在潜在的副作用(例如,必须设置私有变量)?
如以下示例所示,它似乎适用于逻辑回归:
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
try:
from sklearn.model_selection import train_test_split
except ImportError:
from sklearn.cross_validation import train_test_split
iris = datasets.load_iris()
tt_split = train_test_split(iris.data, iris.target, test_size=0.4)
X_train, X_test, y_train, y_test = tt_split
# Here we train the logistic regression
lr = LogisticRegression(class_weight='balanced')
lr.fit(X_train, y_train)
print(lr.score(X_test, y_test)) # prints 0.95
# Persisting
params = lr.get_params()
coef = lr.coef_
intercept = lr.intercept_
# classes_ is not …Run Code Online (Sandbox Code Playgroud)