标签: classification

如何根据Python中的正则表达式规则对字符串进行分类/分类

我正在用Python编写一个ETL脚本,用于获取CSV文件中的数据,验证和清理数据,以及根据某些规则对每一行进行分类或分类,最后将其加载到postgresql数据库中.

数据看起来像这样(简化):

ColA, ColB, Timestamp, Timestamp, Journaltext, AmountA, AmountB

每行都是金融交易.我想要做的是根据一些规则对交易进行分类或分类.规则基本上是与Journaltext列中的文本匹配的正则表达式.

所以我想做的是这样的:

transactions = []
for row in rows:
    t = Transaction(category=classify(row.journaltext))
    transactions.append(t)

我不确定如何有效地编写classify()函数.

这就是分类规则的工作原理:

  • 有许多类别(更多可以并将在以后添加)
  • 每个类别都有一组子字符串或正则表达式,如果事务的Journaltext与此表达式匹配或包含此子字符串,则此事务属于此类别.
  • 交易只能在一个类别上
  • 如果一个类别FOO具有子串'foo'和'Foo',而另一个类别BAR具有子串'足球',那么具有Journaltext ='food'的交易必须放在类别FOO中,因为它只匹配FOO,但是使用Journaltext ='footballs'的交易必须放在BAR类别中.我认为这意味着我必须在每个类别上加优先权或类似优先权.
  • 如果事务与任何表达式都不匹配,则它在类别中为None,或者将放在名为"UNKNOWN"或类似的占位符类别中.这无关紧要.

好.那么如何在Python中表示这些类别和相应的规则呢?

我非常感谢你的意见.即使你无法提供完整的解决方案.任何暗示我朝着正确方向发展的事情都会很棒.谢谢.

python regex etl classification data-warehouse

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

使用naiveBayes(e1071)进行分类不起作用($ levels返回NULL)

我使用naiveBayes(e1071 http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Classification/Na%C3%AFve_Bayes)对我的数据集进行分类(Classification class:"class"0/1).这是我做的:

library(e1071)
arrhythmia <- read.csv(file="/home/.../arrhythmia.csv", head=TRUE, sep=",")

#devide into training and test data 70:30
trainingIndex <- createDataPartition(arrhythmia$class, p=.7, list=F)
arrhythmia.training <- arrhythmia[trainingIndex,]
arrhythmia.testing <- arrhythmia[-trainingIndex,]

nb.classifier <- naiveBayes(class ~ ., data = arrhythmia.training)
predict(nb.classifier,arrhythmia.testing[,-260])
Run Code Online (Sandbox Code Playgroud)

分类器不起作用,这是我得到的:

> predict(nb.classifier,arrhythmia.testing[,-260])
factor(0)
Levels: 

> str(arrhythmia.training)
'data.frame':   293 obs. of  260 variables:
 $ age                         : int  75 55 13 40 44 50 62 54 30 46 ...
 $ sex                         : int  0 0 0 1 0 1 0 1 0 1 ... …
Run Code Online (Sandbox Code Playgroud)

r classification machine-learning

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

R:Naives贝叶斯分类器仅基于先验概率决定

我试图根据他们的情绪将推文分为三类(买入,持有,卖出).我正在使用R和e1071包.

我有两个数据框:一个训练集和一组新推文,需要预测情绪.

训练集数据框:

   +--------------------------------------------------+

   **text | sentiment**

   *this stock is a good buy* | Buy

   *markets crash in tokyo* | Sell

   *everybody excited about new products* | Hold

   +--------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

现在我想使用推文文本trainingset[,2]和情绪类别来训练模型 trainingset[,4].

classifier<-naiveBayes(trainingset[,2],as.factor(trainingset[,4]), laplace=1)
Run Code Online (Sandbox Code Playgroud)

用分析查看分类器的元素

classifier$tables$x

我发现条件概率是计算出来的.每一条有关买入,持有和卖出的推文都有不同的概率.太好了.

但是当我预测训练集时:

predict(classifier, trainingset[,2], type="raw")

我得到的分类基于先验概率,这意味着每条推文都被归类为Hold(因为"Hold"在情绪中占有最大份额).所以每条推文都有相同的买入,持有和卖出概率:

      +--------------------------------------------------+

      **Id | Buy | Hold | Sell**

      1  |0.25 | 0.5  | 0.25

      2  |0.25 | 0.5  | 0.25

      3  |0.25 | 0.5  | 0.25

     ..  |..... | ....  | ...

      N  |0.25 …
Run Code Online (Sandbox Code Playgroud)

r classification machine-learning text-mining

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

为什么scikit-learn的随机森林使用了如此多的内存?

我正在使用scikit的Random Forest实现:

sklearn.ensemble.RandomForestClassifier(n_estimators=100, 
                                        max_features="auto", 
                                        max_depth=10)
Run Code Online (Sandbox Code Playgroud)

调用之后rf.fit(...),进程的内存使用量增加了80MB,或者每棵树增加了0.8MB(我还尝试了许多其他类似结果的设置.我使用toppsutil监视内存使用情况)

深度为10的二叉树最多应该有一个2^11-1 = 2047元素,这些元素都可以存储在一个密集的数组中,这样程序员就可以轻松地找到任何给定元素的父元素和子元素.

每个元素都需要分割和截止中使用的特征的索引,或6-16个字节,具体取决于程序员的经济程度.在我的情况下,这转化为每棵树0.01-0.03MB.

为什么scikit的实现使用20-60x的内存来存储随机森林的树?

classification machine-learning decision-tree random-forest scikit-learn

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

如何在R中为决策树模型创建增益图表?

我在R中创建了一个决策树模型.目标变量是Salary,我们试图根据其他输入变量来预测一个人的工资是高于还是低于50k

df<-salary.data 

train = sample(1:nrow(df), nrow(df)/2)
train = sample(1:nrow(df), size=0.2*nrow(df))
test = - train
training_data = df[train, ]
testing_data = df[test, ]

fit <- rpart(training_data$INCOME ~ ., method="class", data=training_data)##generate tree
testing_data$predictionsOutput = predict(fit, newdata=testing_data, type="class")##make prediction
Run Code Online (Sandbox Code Playgroud)

之后,我尝试通过执行以下操作创建增益图表

# Gain Chart
pred <- prediction(testing_data$predictionsOutput, testing_data$INCOME)
gain <- performance(pred,"tpr","fpr")
plot(gain, col="orange", lwd=2)
Run Code Online (Sandbox Code Playgroud)

通过查看引用,我无法理解如何使用ROCR包通过使用"预测"功能来构建图表.这仅适用于二进制目标变量吗?我收到的错误是"预测格式无效"

任何帮助都将非常感谢帮助我为上述模型构建增益图表.谢谢!!

  AGE          EMPLOYER     DEGREE             MSTATUS            JOBTYPE     SEX C.GAIN C.LOSS HOURS
1  39         State-gov  Bachelors       Never-married       Adm-clerical    Male   2174      0    40
2  50  Self-emp-not-inc  Bachelors  Married-civ-spouse    Exec-managerial    Male      0      0 …
Run Code Online (Sandbox Code Playgroud)

r classification machine-learning decision-tree rstudio

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

在原始数据缺失信息时测量精度和召回

试图改善我的聊天应用程序:

使用我的域中的先前(预处理)聊天交互,我构建了一个工具,为用户提供给定聊天上下文的5种可能的话语,例如:

Raw:"嗨,约翰."

上下文:嗨[[USER_NAME]]
话语:[嗨,你好,你好,你好,再次问好你好]


当然,结果并不总是相关的,例如:

Raw:"嗨,约翰.你好吗?我很好,你在办公室吗?"

背景:嗨[[USER_NAME]]你怎么样我在办公室你很好
话语:[是,不,你好,我是,你好,你好 ]

我使用Elasticsearch与TF/IDF相似性模型和索引结构如下:

{
  "_index": "engagements",
  "_type": "context",
  "_id": "48",
  "_score": 1,
  "_source": {
    "context": "hi [[USER_NAME]] how are you i am fine are you in the office",
    "utterance": "Yes I am"
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:我肯定知道,对于上下文"hi [[USER_NAME]]你怎么样我很好你在办公室"说话"是的我是"是相关的,但是"是","否"也是相关的因为他们出现在类似的背景下.

尝试使用这个优秀的视频,作为一个起点

问:如果我所知道的(根据我的原始数据)只是一个真实的话语,我怎样才能衡量精确度和召回率?

chat classification tf-idf elasticsearch precision-recall

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

如何在TensorFlow中计算CNN的准确性

我是TensorFlow的新手.我正在使用自己的数据集进行二进制分类.但是我不知道如何计算准确度.有人可以帮我这么做吗?

我的分类器有5个卷积层,后面是2个完全连接的层.最终的FC层的输出维度为2,我使用过:

prob = tf.nn.softmax(classification_features, name="output")
Run Code Online (Sandbox Code Playgroud)

classification convolution tensorflow

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

如何检查sklearn模型是分类器还是回归器

有没有一种简单的方法来检查模型实例是否解决了 scikit-learn 库中的分类或回归任务?

python regression model classification scikit-learn

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

比较模型之间的 AUC、对数损失和准确度分数

test set为 a 运行 6 个模型后,我在 上有以下评估指标binary classification problem

  accuracy logloss   AUC
1   19%      0.45   0.54
2   67%      0.62   0.67
3   66%      0.63   0.68
4   67%      0.62   0.66
5   63%      0.61   0.66
6   65%      0.68   0.42
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

  • 模型如何1loglosslogloss最接近于 0)方面是最好的,因为它的表现最差(就 而言accuracy)。这意味着什么 ?
  • 为什么没有模型6具有较低的AUC比如模型得分5,当模型6具有更好accuracy。这意味着什么 ?
  • 有没有办法说这6个模型中哪一个最好?

classification machine-learning loss auc

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

Sigmoid 输出 - 可以解释为概率吗?

Sigmoid 函数输出一个介于 0 和 1 之间的数字。这是一个概率还是仅仅是一个“是或否”,取决于它是高于还是低于 0.5?

最小的例子:

猫与狗的二元分类。0是猫,1是狗。

我可以对 sigmoid 输出值执行以下解释吗:

  • 0.9 - 这肯定是一只狗
  • 0.52 - 它更可能是一只狗而不是一只猫,但仍然不确定
  • 0.5 - 完全未定,可能是猫或狗
  • 0.48 - 更可能是猫而不是狗,但仍然不确定
  • 0.1 - 它肯定是一只猫

或者这是否是解释结果的正确方法:

  • 0.9 - 这是一只狗
  • 0.52 - 这是一只狗
  • 0.5 - 完全未定,可能是猫或狗
  • 0.48 - 这是一只猫
  • 0.1 - 它是一只猫

请注意,在第一种情况下,我们如何利用数值来表示概率,而在第二种情况下,我们完全忽略了概率解释并将答案折叠为二进制。哪个是正确的?你能解释一下为什么吗?


背景上下文,请随意跳过:

我发现许多来源表明是的,sigmoid 输出可以解释为概率:

  • Source yes 1 - (...) sigmoid(z) 将产生一个介于 0 和 1 之间的值(概率)。
  • 来源是 2 - “输出”必须来自满足分布函数属性的函数,以便我们将其解释为概率。(...) “sigmoid 函数”满足这些属性。
  • 来源是 3 -tf.sigmoid(logits)给你概率。

许多来源表明相反,sigmoid 输出不能解释为概率:

classification machine-learning probability neural-network sigmoid

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