小编OAK*_*OAK的帖子

我想在pandas DataFrame中将两列相乘,并将结果添加到新列中

我正在尝试将大熊猫Dataframe(orders_df)中的两个现有列相乘 - 价格(股票收盘价)和金额(库存数量),并将计算添加到名为"价值"的新列中.由于某些原因,当我运行此代码时,"值"列下的所有行都是正数,而某些行应为负数.在DataFrame的Action列下,有七行包含'Sell'字符串,七行包含'Buy'字符串.

for i in orders_df.Action:
 if i  == 'Sell':
  orders_df['Value'] = orders_df.Prices*orders_df.Amount
 elif i == 'Buy':
  orders_df['Value'] = -orders_df.Prices*orders_df.Amount)
Run Code Online (Sandbox Code Playgroud)

请让我知道我做错了什么!

python python-2.7 pandas

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

Scikit-learn混淆矩阵

我无法弄清楚我是否正确设置了二进制分类问题.我标记了正类1和负0.但是我的理解是默认情况下scikit-learn在其混淆矩阵中使用0类作为正类(因此我将其设置为反向).这对我来说很困惑.在scikit-learn的默认设置中,排名是正面还是负面?让我们假设混淆矩阵输出:

confusion_matrix(y_test, preds)
 [ [30  5]
    [2 42] ]
Run Code Online (Sandbox Code Playgroud)

它在混淆矩阵中会是什么样子?实际实例是scikit-learn中的行还是列?

          prediction                        prediction
           0       1                          1       0
         -----   -----                      -----   -----
      0 | TN   |  FP        (OR)         1 |  TP  |  FP
actual   -----   -----             actual   -----   -----
      1 | FN   |  TP                     0 |  FN  |  TN
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning scikit-learn

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

使用GridSearchCV的随机森林 - param_grid出错

我试图用GridSearchCV创建一个随机森林模型但是得到一个与param_grid有关的错误:"ValueError:估算器管道的参数max_features无效.用`estimator.get_params().keys()"检查可用参数列表.我正在对文档进行分类,所以我也将tf-idf矢量化器推送到管道.这是代码:

from sklearn import metrics
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, f1_score, accuracy_score, precision_score, confusion_matrix
from sklearn.pipeline import Pipeline

 #Classifier Pipeline
pipeline = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('classifier', RandomForestClassifier())
])
# Params for classifier
params = {"max_depth": [3, None],
              "max_features": [1, 3, 10],
              "min_samples_split": [1, 3, 10],
              "min_samples_leaf": [1, 3, 10],
              # "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}

# Grid Search Execute
rf_grid = GridSearchCV(estimator=pipeline , param_grid=params) #cv=10
rf_detector = rf_grid.fit(X_train, Y_train)
print(rf_grid.grid_scores_)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚错误显示的原因.当我使用GridSearchCV运行决策树时,正在发生相同的顺便说一句.(Scikit-learn 0.17)

python random-forest scikit-learn grid-search

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

对数丢失输出大于1

我为欺诈领域的文档二进制分类准备了几个模型.我计算了所有型号的对数损失.我认为它主要是测量预测的置信度,并且对数损失应该在[0-1]的范围内.我认为,当结果 - 确定课程不足以进行评估时,它是分类中的一项重要措施.因此,如果两个模型具有非常接近的acc,召回和精度,但是具有较低的对数损失函数,则应该选择它,因为在决策过程中没有其他参数/​​度量(例如时间,成本).

决策树的日志丢失为1.57,对于所有其他模型,它在0-1范围内.我如何解释这个分数?

machine-learning metric loss scikit-learn

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

具有MultiIndex的DataFrame用于dict

我有一个带有MultiIndex的数据帧.我想知道我是否以正确的方式创建了数据框(见下文).

             01.01  02.01  03.01  04.01
bar total1     40     52     18     11
    total2     36     85      5     92
baz total1     23     39     45     70
    total2     50     49     51     65
foo total1     23     97     17     97
    total2     64     56     94     45
qux total1     13     73     38      4
    total2     80      8     61     50
Run Code Online (Sandbox Code Playgroud)

df.index.values 结果是:

array([('bar', 'total1'), ('bar', 'total2'), ('baz', 'total1'),
       ('baz', 'total2'), ('foo', 'total1'), ('foo', 'total2'),
       ('qux', 'total1'), ('qux', 'total2')], dtype=object)
Run Code Online (Sandbox Code Playgroud)

df.index.get_level_values 结果是:

<bound method MultiIndex.get_level_values of MultiIndex(levels=[[u'bar', u'baz', u'foo', u'qux'], [u'total1', u'total2']], …
Run Code Online (Sandbox Code Playgroud)

python dictionary pandas

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

Scikit学习错误消息'精确度和F分数定义不明确,并在标签中设置为0.0'

我正在研究二元分类模型,分类器是天真的贝叶斯.我有一个几乎平衡的数据集,但是当我预测时,我收到以下错误消息:

UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)
Run Code Online (Sandbox Code Playgroud)

我正在使用带有CV k-fold 10的gridsearch.测试集和预测包含两个类,所以我不理解该消息.我正在为其他6个模型研究相同的数据集,训练/测试分裂,cv和随机种子,这些工作非常完美.数据被外部摄取到数据帧中,随机化并且种子是固定的.然后,朴素贝叶斯分类模型将该文件放在此代码片段之前的开头.

X_train, X_test, y_train, y_test, len_train, len_test = \
     train_test_split(data['X'], data['y'], data['len'], test_size=0.4)
pipeline = Pipeline([
    ('classifier', MultinomialNB()) 
])

cv=StratifiedKFold(len_train, n_folds=10)

len_train = len_train.reshape(-1,1)
len_test = len_test.reshape(-1,1)

params = [
  {'classifier__alpha': [0, 0.0001, 0.001, 0.01]}

]

grid = GridSearchCV(
    pipeline,
    param_grid=params,
    refit=True,  
    n_jobs=-1, 
    scoring='accuracy',
    cv=cv, 
)

nb_fit = grid.fit(len_train, y_train)

preds = nb_fit.predict(len_test)

print(confusion_matrix(y_test, preds, labels=['1','0'])) …
Run Code Online (Sandbox Code Playgroud)

python classification scikit-learn

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

使用psycopg2模块将值插入db时出错

我正在尝试使用与sqlalchemy一起使用的pscycopg2模块将数据帧插入到我的postgres数据库中.该过程将excel文件加载到pandas数据框中,然后通过预定义的表模式将数据框插入数据库.

我相信这些是相关的代码行:

post_meta.reflect(schema="users")
df = pd.read_excel(path) 
table = sql.Table(table_name, post_meta, schema="users")
dict_items = df.to_dict(orient='records')
connection.execute(table.insert().values(dict_items))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

<class 'sqlalchemy.exc.ProgrammingError'>, ProgrammingError("(psycopg2.ProgrammingError) can't adapt type 'numpy.int64'",)
Run Code Online (Sandbox Code Playgroud)

数据框中的所有数据字段类型都是int64.

我似乎无法找到类似的问题或信息,说明为什么会出现此错误及其含义.

任何方向都会很棒.谢谢

python postgresql sqlalchemy psycopg2

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

TfidfVectorizer-标准化偏差

我想确保我了解TfidfVectorizer对象中的use_idf和sublinear_tf属性的作用。我已经研究了几天。我正在尝试对长度不同的文档进行分类,并使用当前的tf-idf进行功能选择。

我相信什么时候 use_idf=true算法将针对固有问题(使用TF)的偏见归一化,该术语的频率要高出X倍就不那么重要了。

利用tf*idf公式。然后sublinear_tf = true灌输1+log(tf),以使对长文件和短文件的偏见正常化。

我正在处理对冗长文档(本质上属于一类)的内在偏见,这种规范化是否真的可以减少偏见?

如何确定语料库中文档的长度未集成到模型中?

我正在尝试验证是否在模型中应用了规范化。我试图提取语料库的归一化向量,所以我假设我可以对Tfidfvectorizer矩阵的每一行求和。但是总和大于1,我认为归一化的副本会将所有文档转换为0-1之间的范围。

vect = TfidfVectorizer(max_features=20000, strip_accents='unicode',
stop_words=stopwords,analyzer='word', use_idf=True, tokenizer=tokenizer, ngram_range=(1,2),sublinear_tf= True , norm='l2')

tfidf = vect.fit_transform(X_train)
# sum norm l2 documents
vect_sum = tfidf.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

python normalization tf-idf scikit-learn

3
推荐指数
2
解决办法
4230
查看次数

SQLAlchemy创建动态表和列

我正在尝试根据我检索的数据动态创建数据库表和列.我检索数据库列表,列名和列属性列表,如列类型,primary_key/unique,nullable以及其他元数据.我正在尝试使用此信息动态创建表,并一直使用论坛帖子来更好地了解如何实现这一点.所以我想根据我检索的信息创建表 - 数据库和列信息(colnames和列类型,主键和可空信息.检索到的信息可以每天或每周更改.论坛帖子#1 - Sqlalchemy动态创建表格和映射类

postgresql_db = engine(...)

post_meta = sql.MetaData(bind=postgresql_db.engine)

post_meta.reflect(schema='customers')

connection = postgresql_db.engine.connect()

col_names = ['id', 'fname', 'lname', 'age']
ctype = ['Integer', 'String', 'String', 'Integer']
pk = ['True', 'False', 'False', 'False']
nulls = ['No', 'No', 'No', 'No']

class test(object):

     test = Table('customers', post_meta,
              *(Column(col, ctype, primary_key=pk, nullable=nulls)
           for col, ctype, pk, nulls in zip(col_names, ctype, pk, nulls))

test.create()
Run Code Online (Sandbox Code Playgroud)

有一条错误消息: AttributeError: 'list' object has no attribute _set_parent_with_dispatch 似乎无法确定此错误的确切含义.

追溯:

Traceback (most recent call last):
  File "C:/Users/xxx/db.py", line 247, in …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

Python将txt文件读入数据框

我试图将txt文件(整个目录)提取到pandas数据框中,以使数据框中的每一行都包含一个文件的内容。

据我所知,文本文件没有分隔符,它们是电子邮件的正文。除一个文件外,所有文件均分为多行。因此,我有超过500行,而不是有20行(每个文件一个)。我不知道一个文件与其他文件有何不同。它们都是纯文本。

我使用的代码是:

import pandas as pd 

for i in files:
    list_.append(pd.read_csv('//directory'+i ,sep="\t" , quoting=csv.QUOTE_NONE,header=None,names=["message", "label"]))
Run Code Online (Sandbox Code Playgroud)

我将分隔符设置为表格格式,因为我认为它根本不会影响文本的提取。任何想法在这里是什么问题?

python pandas

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

Tfidvectorizer - L2 归一化向量

我想确保 TfidfVectorizer 对象返回 l2 归一化向量。我正在运行具有不同长度的文档的二元分类问题。

我正在尝试提取每个语料库的归一化向量,因此我假设我可以对 Tfidfvectorizer 矩阵的每一行求和。然而总和大于 1,我认为标准化的 copora 会将所有文档转换为 0-1 之间的范围。

vect = TfidfVectorizer(strip_accents='unicode',
stop_words=stopwords,analyzer='word', use_idf=True, tokenizer=tokenizer, ngram_range=(1,2),sublinear_tf= True , norm='l2')

tfidf = vect.fit_transform(X_train)
# sum norm l2 documents
vect_sum = tfidf.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

vect_sum 的值大于 1,我认为使用范数会导致所有向量都在 0-1 之间。我刚刚意识到 scikit learn 中的一个预处理对象 - preprocessing.normalizer。这是我应该在 Gridsearch 管道中使用的东西吗?请参阅下面的示例。

pipeline = Pipeline([
    ('plb', normalize(tfidf, norm='l2')), #<-- sklearn.preprocessing
    ('tfidf', tfidf_vectorizer),
    ('clf', MultinomialNB()),  
])
Run Code Online (Sandbox Code Playgroud)

preprocessing.normalizer 和 Tfidfvectorizer 范数参数有什么区别?

python normalization tf-idf scikit-learn

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

加入列表和另一个列表?

我希望阅读一个列表,其中包含列名称和另一个列表列表,其中包含需要映射到列的数据.列表列表中的每个列表都是一行数据,以后可以推送到数据库中.

我试图使用以下代码加入这两个列表: dict(zip( column_names, data))但我收到一个错误:

TypeError unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

我如何将列表列表和另一个列表一起加入dict?

column_names = ['id', 'first_name', 'last_name', 'city', 'dob']

data = [
     ['1', 'Mike', 'Walters', 'New York City', '1998-12-01'],
     ['2', 'Daniel', 'Strange', 'Baltimore', '1992-08-12'],
     ['3', 'Sarah', 'McNeal', 'Miami', '1990-05-05'],
     ['4', 'Steve', 'Breene', 'Philadelphia', '1988-02-06']
]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

dict_items = {{'id': '1', 'first_name': 'Mike', 'last_name': 'Walters',
               'city': 'New York City', 'dob': '1998-12-01'},
              {'id': '2', ...}}
Run Code Online (Sandbox Code Playgroud)

后来希望用SQLAlchemy将这个dicts字母推送到数据库.

python dictionary list

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