我有一个包含 1500 个元素的列表 a_tot,我想以随机方式将该列表分为两个列表。列表 a_1 将有 1300 个元素,列表 a_2 将有 200 个元素。我的问题是关于随机化包含 1500 个元素的原始列表的最佳方法。当我对列表进行随机化时,我可以取一个包含 1300 的切片,另一个包含 200 的切片。一种方法是使用 random.shuffle,另一种方法是使用 random.sample。两种方法之间的随机化质量有什么差异吗?列表1中的数据应该是随机样本,列表2中的数据也是如此。有什么建议吗?使用随机播放:
random.shuffle(a_tot) #get a randomized list
a_1 = a_tot[0:1300] #pick the first 1300
a_2 = a_tot[1300:] #pick the last 200
Run Code Online (Sandbox Code Playgroud)
使用样本
new_t = random.sample(a_tot,len(a_tot)) #get a randomized list
a_1 = new_t[0:1300] #pick the first 1300
a_2 = new_t[1300:] #pick the last 200
Run Code Online (Sandbox Code Playgroud) 我想要一个正则表达式,找到"包裹"在"HEAD或HEADa"和"HEAD"之间的文本.也就是说,我可能有一个以第一个单词开头的文本作为HEAD或HEADa以及下面的"head" "属于HEAD类型.
HEAD\n\n text...text...HEAD \n\n text....text HEAD\n\n text....text .....
HEADa\n\n text...text...HEAD \n\n text....text HEAD\n\n text....text .....
我只想捕获"头部"之间的文本,因此我有一个背后的正则表达式,并向前看表达式寻找我的"头".我有以下正则表达式:
var = "HEADa", "HEAD"
my_pat = re.compile(r"(?<=^\b"+var[0]+r"|"+var[1]+r"\b) \w*\s\s(.*?)(?=\b"+var[1] +r"\b)",re.DOTALL|re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行此正则表达式时,我收到一条错误消息,指出我在后面的表达式中不能有可变长度.这个正则表达式有什么问题?
我正在使用scikits接口训练带有交叉验证(stratifiedKfold)的svm分类器.对于每个测试集(k),我得到一个分类结果.我想要一个包含所有结果的混淆矩阵.Scikits有一个混淆矩阵接口:sklearn.metrics.confusion_matrix(y_true,y_pred)我的问题是我应该如何累积y_true和y_pred值.它们是数组(numpy).我应该根据我的k-fold参数定义数组的大小?对于每个结果,我应该将y_true和y-pred添加到数组中?
我将使用带有多项式内核的 scikit SVC,格式如下:(1 + xTn.xm)^4。度数为 4 的含义(一加 xTn.xm 的乘积)。xTn 是转置后的 xn 值。当我查看 scikit 文档时,他们指定了 SVC 的参数:
degree : int, optional (default=3)
| Degree of kernel function.
| It is significant only in 'poly' and 'sigmoid'.
|
| gamma : float, optional (default=0.0)
| Kernel coefficient for 'rbf' and 'poly'.
| If gamma is 0.0 then 1/n_features will be used instead.
|
| coef0 : float, optional (default=0.0)
| Independent term in kernel function.
| It is only significant in 'poly' …
Run Code Online (Sandbox Code Playgroud) 我使用scikit-learn提供的KFold函数运行10倍CV,以便选择一些内核参数.我正在实现这个(grid_search)程序:
1-pick up a selection of parameters
2-generate a svm
3-generate a KFold
4-get the data that correspons to training/cv_test
5-train the model (clf.fit)
6-classify with the cv_testdata
7-calculate the cv-error
8-repeat 1-7
9-When ready pick the parameters that provide the lowest average(cv-error)
Run Code Online (Sandbox Code Playgroud)
如果我在KFold代中不使用shuffle,如果我重复相同的运行并且"最佳结果"是可重复的,那么我得到的平均值(cv_errors)的结果非常相似.如果我使用shuffle,如果我重复相同的运行几次并且"最佳值"不可重复,则我得到平均值(cv-errors)的不同值.我可以理解,我应该为每个KFold传递获得不同的cv_errors,但最终的平均值应该是相同的.带有shuffle的KFold如何真正起作用?每次调用KFold时,它都会对我的索引进行洗牌,并生成训练/测试数据.它如何为"训练/测试"挑选不同的折叠?是否有随机方式选择不同的折叠进行培训/测试?任何情况下,其有利的"洗牌"和情况不是??
scikit-learn的SVM基于LIBSVM.LIBSVM/SVM要求应缩放数据,并建议特征值应在两个范围[0,1]或[-1,1]之一中.也就是说,在典型的矩阵中,每列是一个特征,并且每列完成缩放.
LIBSVM FAQ建议进行简单的缩放以获得[0,1]之间的功能:
x'=(x-min)/(Max-min)
Run Code Online (Sandbox Code Playgroud)
scikit-learn是否支持这种"简单缩放"?是否有其他建议用于扩展要与SVM和RBF内核一起使用的功能.任何参考?我找到了一篇名为"支持向量分类的实用指南"的参考文章,该文章基于LIBSVM,他们建议缩放到[0,1]或[-1,1].
我有一个函数,它有一个字典作为输入和一个值n.字典中的每个项目都是具有一个或多个值的集合.该函数应对字典键进行排序,它应提取并返回"n"值.此功能将经常执行,因此我正在尝试优化它.有什么建议?
def select_items(temp_dict, n):
"""Select n items from the dictionary"""
res = []
sort_keys = sorted(temp_dict.keys())
count = 0
for key in sort_keys:
for pair in temp_dict[key]:
if count < n:
res.append(pair)
count += 1
else:
return res
return res
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我有一个count和"if语句"来控制所选值的数量.有没有办法通过在itertools或其他东西中使用某些函数来优化此代码?
我有一个分类变量的数据框,我已经分成了几组,我得到了每组的计数.
My original data nyD looks like:
Source: local data frame [7 x 3]
Groups: v1, v2, v3
v1 v2 v3
1 a plus yes
2 a plus yes
3 a minus no
4 b minus yes
5 b x yes
6 c x notk
7 c x notk
I performed the following operations using dplyr:
ny1 <- nyD %>% group_by(v1,v2,v3)%>%
summarise(count=n()) %>%
mutate(prop = count/sum(count))
My data "ny1" looks like:
Source: local data frame [5 x 5]
Groups: v1, …
Run Code Online (Sandbox Code Playgroud) 如果有两个单词,我想要一个正则表达式来找到一个短语和前面的两个单词.例如,我有字符串(每行一个句子):
雪佛兰是我的车,而Rusty是我的马.我的车非常漂亮,我的狗是红色的.
如果我使用正则表达式:
re.finditer(r'[\w+\b|^][\w+\b]my car',txt)
Run Code Online (Sandbox Code Playgroud)
我没有得到任何匹配.
如果我使用正则表达式:
re.finditer(r'[\S+\s|^][\S+\s]my car',txt)
Run Code Online (Sandbox Code Playgroud)
我得到了:是我的车'和'.我的车'(我忽略了案例并使用多线)
为什么带有\ w +\b的正则表达式找不到任何东西?它应该找到两个单词和'我的车'如果有两个单词,怎么能在'我的车'之前得到两个完整的单词.如果我的车前只有一个字,我应该得到它.如果前面没有任何词语,我应该只获得"我的车".在我的字符串示例中,我应该得到:'雪佛兰是我的车'和'我的车'(这里没有前面的话)
python ×6
scikit-learn ×4
python-2.7 ×2
regex ×2
dplyr ×1
optimization ×1
python-3.x ×1
r ×1
random ×1
scikits ×1
svm ×1