我正在尝试将大熊猫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)
请让我知道我做错了什么!
我无法弄清楚我是否正确设置了二进制分类问题.我标记了正类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) 我试图用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)
我为欺诈领域的文档二进制分类准备了几个模型.我计算了所有型号的对数损失.我认为它主要是测量预测的置信度,并且对数损失应该在[0-1]的范围内.我认为,当结果 - 确定课程不足以进行评估时,它是分类中的一项重要措施.因此,如果两个模型具有非常接近的acc,召回和精度,但是具有较低的对数损失函数,则应该选择它,因为在决策过程中没有其他参数/度量(例如时间,成本).
决策树的日志丢失为1.57,对于所有其他模型,它在0-1范围内.我如何解释这个分数?
我有一个带有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) 我正在研究二元分类模型,分类器是天真的贝叶斯.我有一个几乎平衡的数据集,但是当我预测时,我收到以下错误消息:
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) 我正在尝试使用与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.
我似乎无法找到类似的问题或信息,说明为什么会出现此错误及其含义.
任何方向都会很棒.谢谢
我想确保我了解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) 我正在尝试根据我检索的数据动态创建数据库表和列.我检索数据库列表,列名和列属性列表,如列类型,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) 我试图将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)
我将分隔符设置为表格格式,因为我认为它根本不会影响文本的提取。任何想法在这里是什么问题?
我想确保 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 范数参数有什么区别?
我希望阅读一个列表,其中包含列名称和另一个列表列表,其中包含需要映射到列的数据.列表列表中的每个列表都是一行数据,以后可以推送到数据库中.
我试图使用以下代码加入这两个列表:
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 ×11
scikit-learn ×6
pandas ×3
dictionary ×2
sqlalchemy ×2
tf-idf ×2
grid-search ×1
list ×1
loss ×1
metric ×1
postgresql ×1
psycopg2 ×1
python-2.7 ×1