小编alp*_*uri的帖子

在多个程序中正确使用Scikit的LabelEncoder

我手头的基本任务是

a)读取一些制表符分隔的数据.

b)做一些基本的预处理

c)对于每个分类列,用于LabelEncoder创建映射.这有点像这样

mapper={}
#Converting Categorical Data
for x in categorical_list:
     mapper[x]=preprocessing.LabelEncoder()

for x in categorical_list:
     df[x]=mapper[x].fit_transform(df.__getattr__(x))
Run Code Online (Sandbox Code Playgroud)

其中df是pandas数据帧,categorical_list是需要转换的列标题列表.

d)训练分类器并使用将其保存到磁盘 pickle

e)现在在另一个程序中,加载了保存的模型.

f)加载测试数据并执行相同的预处理.

g)LabelEncoder's用于转换分类数据.

h)该模型用于预测.

现在我的问题是,步骤g)是否正常工作?

正如文档LabelEncoder所说

It can also be used to transform non-numerical labels (as long as 
they are hashable and comparable) to numerical labels.
Run Code Online (Sandbox Code Playgroud)

那么每个条目每次都会哈希到完全相同的值吗?

如果不是,有什么好办法可以解决这个问题.有没有办法重新编码编码器的映射?或者与LabelEncoder完全不同的方式?

python pandas scikit-learn

21
推荐指数
2
解决办法
1万
查看次数

在python的列表中连接元组的元素

我有一个元组列表,其中包含字符串例如:

[('this', 'is', 'a', 'foo', 'bar', 'sentences')
('is', 'a', 'foo', 'bar', 'sentences', 'and')
('a', 'foo', 'bar', 'sentences', 'and', 'i')
('foo', 'bar', 'sentences', 'and', 'i', 'want')
('bar', 'sentences', 'and', 'i', 'want', 'to')
('sentences', 'and', 'i', 'want', 'to', 'ngramize')
('and', 'i', 'want', 'to', 'ngramize', 'it')]
Run Code Online (Sandbox Code Playgroud)

现在我希望连接一个元组中的每个字符串以创建一个空格分隔字符串列表.我使用以下方法:

NewData=[]
for grams in sixgrams:
       NewData.append( (''.join([w+' ' for w in grams])).strip())
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好.

但是,我拥有的列表有超过一百万个元组.所以我的问题是这种方法足够有效还是有更好的方法来做到这一点.谢谢.

python string tuples list concatenation

19
推荐指数
3
解决办法
3万
查看次数

从给定的算术级数中查找缺失的数字

我遇到了这个问题,你给了一个数字N作为输入,然后是N个数字(其中3 <= N <= 2500).这些N数字是算术级数(大小N+1)的一部分,从中删除了一个数字.所以任务是找到丢失号码.例如

5
1 3 5 9 11  
Run Code Online (Sandbox Code Playgroud)

输出是 7

我提出了两种方法,第二种方法通过所有测试用例,但第一种方法在某些(隐藏)情况下失败.

首先,我将解释第二种方法

方法二

Let diff=(last_number-first_number)/N
 //Considering 0 based indexing
 for i=0 to (N-2)
    if( array[i+1] is not equal to (array[i]+diff))
          print (array[i]+diff)
          break
Run Code Online (Sandbox Code Playgroud)

该方法通过了所有测试用例.现在我实现的第一种方法和某些测试用例失败的方法如下

方法I

 //Considering 0 based indexing
 for i=1 to (N-2)
      if (2*array[i] is not equal to (array[i-1]+array[i+1])) then
              if( (array[i]-array[i-1])< (array[i+1]-array[i]))
                      print 2*array[i]-array[i-1]
              else 
                      print 2*array[i]-array[i+1]
              break
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释有什么问题METHOD I?我错过了哪些案例.谢谢.

algorithm

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

Mongo Shell中NumberLong的行为

我在Mongo Shell中写了以下4个语句

一世) NumberLong(3)

II) NumberLong(3)+NumberLong(4)

三) typeof NumberLong(3)

IV) typeof (NumberLong(3)+NumberLong(4))

和他们相应的产出是

一世) NumberLong(3)

II) 7

三) object

IV) number

虽然第二个结果使第四个结果显而易见,但我无法找到这个行为的头部或尾部.幕后发生了什么?我尝试在MongoDB文档中找到基础概念,但找不到多少.请帮忙!!

mongodb mongo-shell

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

在python中打破列表理解中的循环

我有一个简单的任务,就是从列表中选择所有元素(按降序排序),它们位于给定元素之上.即

X=[32,28,26,21,14,11,8,6,3]
Threshold=12
Result=[32,28,26,21,14]
Run Code Online (Sandbox Code Playgroud)

我最初做的是简单的事情

FullList=[x for x in FullList if x>=Threshold]
Run Code Online (Sandbox Code Playgroud)

但是,由于列表已经排序,我可以(并且需要)介于两者之间.

多撞头和一个美丽的教程后在这里,我终于想出了以下解决方案.

 def stopIteration():
      raise StopIteration

 FullList=list(x if x>=Threshold else stopIteration() for x in FullList )
Run Code Online (Sandbox Code Playgroud)

但是,当我写下面的语句时,它给我一个语法错误:

FullList=list(x if x>=Threshold else raise StopIteration for x in FullList )
Run Code Online (Sandbox Code Playgroud)

这种行为背后的原因是什么?

python list-comprehension

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