我正在编写一个python脚本来插入一组给定的样条点.这些点由它们的[x, y]坐标定义.
我试着使用这段代码:
x = np.array([23, 24, 24, 25, 25])
y = np.array([13, 12, 13, 12, 13])
tck, u = scipy.interpolate.splprep([x,y], s=0)
unew = np.arange(0, 1.00, 0.005)
out = scipy.interpolate.splev(unew, tck)
Run Code Online (Sandbox Code Playgroud)
这给了我这样一条曲线:
但是,我需要有一个平滑的闭合曲线 - 在上面的图片上,其中一个点的衍生物显然是不一样的.我怎样才能做到这一点?
我想在sklearn中构建一个Pipeline并使用GridSearchCV测试不同的模型.
只是一个例子(请不要注意选择的特定型号):
reg = LogisticRegression()
proj1 = PCA(n_components=2)
proj2 = MDS()
proj3 = TSNE()
pipe = [('proj', proj1), ('reg' , reg)]
pipe = Pipeline(pipe)
param_grid = {
'reg__c': [0.01, 0.1, 1],
}
clf = GridSearchCV(pipe, param_grid = param_grid)
Run Code Online (Sandbox Code Playgroud)
在这里,如果我想尝试不同的模型来减少维数,我需要编写不同的管道并手动比较它们.有一个简单的方法吗?
我想出的一个解决方案是定义从基本估算器派生的我自己的类:
class Projection(BaseEstimator):
def __init__(self, est_name):
if est_name == "MDS":
self.model = MDS()
...
...
def fit_transform(self, X):
return self.model.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
我认为它会起作用,我只是创建一个Projection对象并将其传递给Pipeline,使用估算器的名称作为参数.
但对我来说,这种方式有点乱,不可扩展:每次我想比较不同的模型时,我都会定义新类.另外,为了继续这个解决方案,可以实现一个执行相同工作但具有任意模型集的类.这对我来说似乎过于复杂.
比较不同模型的最自然和pythonic方法是什么?
我需要用0填充二维数组.但编译后的程序会出现此错误.怎么了?
int main()
{
int vert[1001][1001];
int hor[1001][1001];
int dudiag[1416][1416];
int uddiag[1416][1416];
int n, k, m;
int row, col;
int i, j;
int answer = 0;
for(i = 0; i <= 1000; i++){
for(j = 0; j <= 1000; j++){
vert[i][j] = 0;
hor[i][j] = 0;
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
当循环被注释掉时,它可以正常工作.
我需要对数据集中的分类特征进行编码。我希望对它们进行排序,以便“low”变为 0,“vhigh”变为 3。我尝试使用预处理中的标签编码器:
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(['low', 'med', 'high', 'vhigh'])
ar = le.transform(df[df["buying"] == 'low']["buying"])
Run Code Online (Sandbox Code Playgroud)
不幸的是,功能没有排序:第四行返回 1 数组,我想要一个 0 数组。
我尝试创建另一个编码器,将数字映射到我想要的数字。但似乎只是没有结果。
other_le = preprocessing.LabelEncoder()
other_le.fit([1, 2, 0, 3])
other_le.transform(ar)
Run Code Online (Sandbox Code Playgroud)
最后一行再次返回 1。
如何以最短的方式保持分类特征的顺序?