小编Nic*_*eli的帖子

scikit-learn中的TfidfVectorizer:ValueError:np.nan是一个无效的文档

我正在使用scikit中的TfidfVectorizer学习从文本数据中提取一些特征.我有一个带有分数的CSV文件(可以是+1或-1)和一个评论(文本).我将这些数据导入DataFrame,以便运行Vectorizer.

这是我的代码:

import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.read_csv("train_new.csv",
             names = ['Score', 'Review'], sep=',')

# x = df['Review'] == np.nan
#
# print x.to_csv(path='FindNaN.csv', sep=',', na_rep = 'string', index=True)
#
# print df.isnull().values.any()

v = TfidfVectorizer(decode_error='replace', encoding='utf-8')
x = v.fit_transform(df['Review'])
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误的追溯:

Traceback (most recent call last):
  File "/home/PycharmProjects/Review/src/feature_extraction.py", line 16, in <module>
x = v.fit_transform(df['Review'])
 File "/home/b/hw1/local/lib/python2.7/site-   packages/sklearn/feature_extraction/text.py", line 1305, in fit_transform
   X = super(TfidfVectorizer, self).fit_transform(raw_documents)
 File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tf-idf pandas scikit-learn

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

使用df.drop删除行的Pandas不起作用

我有一个像这样的DataFrame(第一列是index(786 ...)和第二列day(25 ...)并且Rainfall amount是空的):

Day Rainfall amount (millimetres)  
786   25                              
787   26                              
788   27                              
789   28                              
790   29                              
791    1                              
792    2                              
793    3                              
794    4                              
795    5 
Run Code Online (Sandbox Code Playgroud)

我想删除790行.我用df.drop尝试了很多东西但是没有发生.

我希望你能帮助我.

python dataframe python-3.x pandas

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

Python ggplot-ggsave函数未定义

我刚开始学习使用python.我正在使用anaconda python 3.5和Rodeo来做一个简单的事情ggplot.

from ggplot import *
df=pd.DataFrame({"Animal":["dog","dolphin","chicken","ant","spider"],"Legs":[4,0,2,6,8]})
p=ggplot(df, aes(x="Animal", weight="Legs")) + geom_bar(fill='blue')
p
ggsave("test.png",p)
Run Code Online (Sandbox Code Playgroud)

在第5行之前一切正常.我得到了我想要的情节.但是当我试图保存情节时,我收到了一个错误:

NameError:未定义名称'ggsave'

似乎ggplot模块中没有ggsave函数?ggplot版本是0.11.1.我在这里错过了什么吗?

python ggplot2 pandas

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

如何在 Python 中进行实时语音活动检测?

我正在对录制的音频文件执行语音活动检测,以检测波形中的语音与非语音部分。

分类器的输出看起来像(突出显示的绿色区域表示语音):

在此处输入图片说明

我在这里面临的唯一问题是使其适用于音频输入流(例如:来自麦克风)并在规定的时间范围内进行实时分析。

我知道PyAudio可用于动态记录来自麦克风的语音,并且有几个波形、频谱、频谱图等的实时可视化示例,但找不到与以近乎实时的方式进行特征提取相关的任何内容.

python speech-recognition speech speech-to-text pyaudio

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

使用多索引在pandas中添加小计列

我有一个数据框,在列上有一个3级深度多索引.我想计算行(sum(axis=1))中的小计,其中我在其中一个级别上求和,同时保留其他级别.我想我知道如何使用level关键字参数来做到这一点pd.DataFrame.sum.但是,我很难想到如何将这笔钱的结果合并到原始表中.

建立:

import numpy as np
import pandas as pd
from itertools import product

np.random.seed(0)

colors = ['red', 'green']
shapes = ['square', 'circle']
obsnum = range(5)

rows = list(product(colors, shapes, obsnum))
idx = pd.MultiIndex.from_tuples(rows)
idx.names = ['color', 'shape', 'obsnum']

df = pd.DataFrame({'attr1': np.random.randn(len(rows)), 
                   'attr2': 100 * np.random.randn(len(rows))},
                  index=idx)

df.columns.names = ['attribute']

df = df.unstack(['color', 'shape'])
Run Code Online (Sandbox Code Playgroud)

给出一个漂亮的框架:

原始框架

说我想降低shape水平.我可以跑:

tots = df.sum(axis=1, level=['attribute', 'color'])
Run Code Online (Sandbox Code Playgroud)

得到我的总数是这样的:

总计

有了这个,我想把它放到原来的框架上.我想我可以用一种有点麻烦的方式做到这一点:

tots = df.sum(axis=1, level=['attribute', 'color'])
newcols = pd.MultiIndex.from_tuples(list((i[0], …
Run Code Online (Sandbox Code Playgroud)

python pandas

14
推荐指数
2
解决办法
4685
查看次数

Python:使用Levenshtein距离作为度量标准,使用scikit-learn的dbscan进行字符串聚类:

我一直在尝试聚集多个URL数据集(每个约100万个),以查找每个URL的原始和拼写错误.我决定使用levenshtein距离作为相似性度量,并将dbscan作为聚类算法,因为k-means算法不起作用,因为我不知道聚类的数量.

我使用Scikit-learn实现dbscan时遇到了一些问题.

下面的代码片段适用于我使用的格式的小数据集,但由于它预先计算整个距离矩阵,因此占用O(n ^ 2)空间和时间,对于我的大型数据集来说太过分了.我已经运行了好几个小时,但它最终只占用了我的电脑的所有内存.

lev_similarity = -1*np.array([[distance.levenshtein(w1[0],w2[0]) for w1 in words] for w2 in words])
dbscan = sklearn.cluster.DBSCAN(eps = 7, min_samples = 1)
dbscan.fit(lev_similarity)
Run Code Online (Sandbox Code Playgroud)

所以我想我需要一些方法来动态计算相似性,因此尝试了这种方法.

dbscan = sklearn.cluster.DBSCAN(eps = 7, min_samples = 1, metric = distance.levenshtein)
dbscan.fit(words)
Run Code Online (Sandbox Code Playgroud)

但这种方法最终给我一个错误:

ValueError: could not convert string to float: URL
Run Code Online (Sandbox Code Playgroud)

我意识到这意味着它试图将输入转换为相似函数浮动.但我不希望它这样做.据我所知,它只需要一个可以接受两个参数并返回一个浮点值的函数,然后它可以与mp进行比较,这是levenshtein距离应该做的.

我被困在这一点上,因为我不知道sklearn的dbscan的实现细节,以找出它为什么试图将它转换为float,而且我对如何避免O(n ^ 2)矩阵也没有更好的想法计算.

如果有更好或更快的方法来聚集这些我可能忽略的字符串,请告诉我.

python cluster-analysis machine-learning levenshtein-distance scikit-learn

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

两个嵌入模型的联合训练(KGE + GloVe)

如何创建一个联合模型,股票的参数知识图嵌入(KGE)模型,塔克(如下),和手套(与尺寸一起承担共生矩阵已经有售)

换句话说,联合模型必须服从CMTF的标准(Ç oupled中号ATRIX和Ť恩索尔˚F actorizations)框架和从所述两个嵌入物必须在训练期间被捆扎的权重。这里的问题是 KGE 需要一个三元组(主题、关系、对象),而 GloVe 需要一个共现矩阵。此外,它们的损失函数的计算方式也不同。

class TuckER(torch.nn.Module):
    def __init__(self, d, d1, d2, **kwargs):
        super(TuckER, self).__init__()

        self.E = torch.nn.Embedding(len(d.entities), d1)
        self.R = torch.nn.Embedding(len(d.relations), d2)
        self.W = torch.nn.Parameter(torch.tensor(np.random.uniform(-1, 1, (d2, d1, d1)), 
                                    dtype=torch.float, device="cuda", requires_grad=True))

        self.input_dropout = torch.nn.Dropout(kwargs["input_dropout"])
        self.hidden_dropout1 = torch.nn.Dropout(kwargs["hidden_dropout1"])
        self.hidden_dropout2 = torch.nn.Dropout(kwargs["hidden_dropout2"])
        self.loss = torch.nn.BCELoss()

        self.bn0 = torch.nn.BatchNorm1d(d1)
        self.bn1 = torch.nn.BatchNorm1d(d1)
        
    def init(self):
        xavier_normal_(self.E.weight.data)
        xavier_normal_(self.R.weight.data)

    def forward(self, e1_idx, r_idx):
        e1 = self.E(e1_idx)
        x = self.bn0(e1)
        x = …
Run Code Online (Sandbox Code Playgroud)

python deep-learning torch pytorch knowledge-graph

9
推荐指数
0
解决办法
294
查看次数

在pandas数据框中插入sklearn CountVectorizer的结果

我有一堆14784文本文档,我试图进行矢量化,所以我可以运行一些分析.我CountVectorizer在sklearn中使用了将文档转换为特征向量.我这样做是通过调用:

vectorizer = CountVectorizer
features = vectorizer.fit_transform(examples)
Run Code Online (Sandbox Code Playgroud)

其中examples是所有文本文档的数组

现在,我正在尝试使用其他功能.为此,我将这些功能存储在pandas数据帧中.目前,我的pandas数据帧(没有插入文本功能)具有形状(14784, 5).我的特征向量的形状是(14784, 21343).

将矢量化特征插入到pandas数据帧中的好方法是什么?

python machine-learning pandas scikit-learn

8
推荐指数
2
解决办法
4326
查看次数

LabelEncoder指定DataFrame中的类

我正在将LabelEncoder应用于pandas DataFrame, df

Feat1  Feat2  Feat3  Feat4  Feat5
  A      A      A      A      E
  B      B      C      C      E
  C      D      C      C      E
  D      A      C      D      E
Run Code Online (Sandbox Code Playgroud)

我正在将标签编码器应用于这样的数据帧 -

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
intIndexed = df.apply(le.fit_transform)
Run Code Online (Sandbox Code Playgroud)

这是标签的映射方式

A = 0
B = 1
C = 2
D = 3
E = 0
Run Code Online (Sandbox Code Playgroud)

我猜测E没有给出值,4因为它没有出现在除了之外的任何其他列中Feat 5.

我希望E被赋予4- 但不知道如何在DataFrame中执行此操作.

python machine-learning pandas scikit-learn

6
推荐指数
2
解决办法
7850
查看次数

如何将cross_val_score与random_state一起使用

我在不同的运行中获得了不同的值...在这里我做错了什么:

X=np.random.random((100,5))
y=np.random.randint(0,2,(100,))
clf=RandomForestClassifier()
cv = StratifiedKFold(y, random_state=1)
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv)
print(s)
# [ 0.42321429  0.44360902  0.34398496]
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv)
print(s)
# [ 0.42678571  0.46804511  0.36090226]
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn

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