小编soo*_*bus的帖子

使用scipy插值闭合曲线

我正在编写一个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)

这给了我这样一条曲线:

插值不好

但是,我需要有一个平滑的闭合曲线 - 在上面的图片上,其中一个点的衍生物显然是不一样的.我怎样才能做到这一点?

python interpolation numpy curve-fitting scipy

8
推荐指数
1
解决办法
4093
查看次数

在Pipeline for GridSearchCV中替换不同的模型

我想在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方法是什么?

python pipeline scikit-learn cross-validation grid-search

4
推荐指数
2
解决办法
1383
查看次数

C中的分段错误

我需要用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)

当循环被注释掉时,它可以正常工作.

c stack-overflow gcc segmentation-fault

3
推荐指数
1
解决办法
92
查看次数

使用 sklearn 按给定顺序对分类特征进行编码

我需要对数据集中的分类特征进行编码。我希望对它们进行排序,以便“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。

如何以最短的方式保持分类特征的顺序?

python pandas scikit-learn

1
推荐指数
1
解决办法
1464
查看次数