我正在用Python做一个机器学习项目,所以我必须做并行预测功能,我在我的程序中使用它.
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
def multi_predict(X, predict, *args, **kwargs):
pool = Pool(cpu_count())
results = pool.map(predict, X)
pool.close()
pool.join()
return results
Run Code Online (Sandbox Code Playgroud)
问题是我所有的CPU只加载了20-40%(总计为100%).我使用multiprocessing.dummy,因为我在pickling函数中遇到了多处理模块的问题.
我正在努力解决机器学习问题.我有一个具有时间序列元素的特定数据集.对于这个问题,我正在使用着名的python库 - sklearn.这个库中有很多交叉验证迭代器.还有几个迭代器可以自己定义交叉验证.问题是我真的不知道如何为时间序列定义简单的交叉验证.这是我想要得到的一个很好的例子:
假设我们有几个句点(年),我们想将我们的数据集分成几个块,如下所示:
data = [1, 2, 3, 4, 5, 6, 7]
train: [1] test: [2] (or test: [2, 3, 4, 5, 6, 7])
train: [1, 2] test: [3] (or test: [3, 4, 5, 6, 7])
train: [1, 2, 3] test: [4] (or test: [4, 5, 6, 7])
...
train: [1, 2, 3, 4, 5, 6] test: [7]
Run Code Online (Sandbox Code Playgroud)
我无法真正理解如何使用sklearn工具创建这种交叉验证.也许我应该用PredefinedSplit从sklearn.cross_validation这样的:
train_fraction = 0.8
train_size = int(train_fraction * X_train.shape[0])
validation_size = X_train.shape[0] - train_size …Run Code Online (Sandbox Code Playgroud) 我试图从字典创建类实例,其中包含多个类具有属性的键.我已经从这个链接读了相同问题的答案:从字典创建类实例属性?.问题是我无法__init__在我想要的类定义中编写,因为我使用的是SQLAlchemy声明式样式类定义.还会type('className', (object,), dict)创建不需要的错误属性.这是我找到的解决方案:
dict = {'key1': 'value1', 'key2': 'value2'}
object = MyClass(**dict)
Run Code Online (Sandbox Code Playgroud)
但是如果dict有冗余密钥,它就不起作用:
dict = {'key1': 'value1', 'key2': 'value2', 'redundant_key': 'redundant_value'}
object = MyClass(**dict) # here need to ignore redundant_key
Run Code Online (Sandbox Code Playgroud)
除了直接删除所有冗余密钥外,还有其他解决方案dict吗?
这是一段执行插入排序的C++代码:
#ifndef INSERTIONSORT
#define INSERTIONSORT
template<class T>
void insertionSort(T* elements, int size, int reverse = 0) {
T tempElement;
int j;
for (int i = 0; i < size; ++i) {
tempElement = elements[i];
for (j = i - 1; j >= 0 && elements[j] > tempElement; j--)
elements[j + 1] = elements[j];
elements[j + 1] = tempElement;
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
没有重复代码,我不能写它.这不是我第一次遇到这种问题.我需要的是替换<为>,when reverse= 1.我尝试的第一种方法是使用三元运算符:
(repeat)?(elements[j] > tempElement):(elements[j] < tempElement)
它看起来有点奇怪,我知道它不是解决问题的最佳方法,所以我尝试了这个:
elements[j] (reverse)?(<):(>) tempElement
但它不正确,不起作用.此外,三元运算符使if语句中的基本运算数增加了一倍.我知道它只是一个插入排序,它执行Θ(n ^ …
python ×3
c++ ×1
class ×1
dictionary ×1
dry ×1
reverse ×1
scikit-learn ×1
sorting ×1
sqlalchemy ×1