我正在用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()函数.
这就是分类规则的工作原理:
好.那么如何在Python中表示这些类别和相应的规则呢?
我非常感谢你的意见.即使你无法提供完整的解决方案.任何暗示我朝着正确方向发展的事情都会很棒.谢谢.
我使用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和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) 我正在使用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(我还尝试了许多其他类似结果的设置.我使用top和psutil监视内存使用情况)
深度为10的二叉树最多应该有一个2^11-1 = 2047元素,这些元素都可以存储在一个密集的数组中,这样程序员就可以轻松地找到任何给定元素的父元素和子元素.
每个元素都需要分割和截止中使用的特征的索引,或6-16个字节,具体取决于程序员的经济程度.在我的情况下,这转化为每棵树0.01-0.03MB.
为什么scikit的实现使用20-60x的内存来存储随机森林的树?
classification machine-learning decision-tree random-forest scikit-learn
我在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) 试图改善我的聊天应用程序:
使用我的域中的先前(预处理)聊天交互,我构建了一个工具,为用户提供给定聊天上下文的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]]你怎么样我很好你在办公室"说话"是的我是"是相关的,但是"是","否"也是相关的因为他们出现在类似的背景下.
尝试使用这个优秀的视频,作为一个起点
问:如果我所知道的(根据我的原始数据)只是一个真实的话语,我怎样才能衡量精确度和召回率?
我是TensorFlow的新手.我正在使用自己的数据集进行二进制分类.但是我不知道如何计算准确度.有人可以帮我这么做吗?
我的分类器有5个卷积层,后面是2个完全连接的层.最终的FC层的输出维度为2,我使用过:
prob = tf.nn.softmax(classification_features, name="output")
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来检查模型实例是否解决了 scikit-learn 库中的分类或回归任务?
在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)
我有以下问题:
1在logloss(logloss最接近于 0)方面是最好的,因为它的表现最差(就 而言accuracy)。这意味着什么 ?6具有较低的AUC比如模型得分5,当模型6具有更好accuracy。这意味着什么 ?Sigmoid 函数输出一个介于 0 和 1 之间的数字。这是一个概率还是仅仅是一个“是或否”,取决于它是高于还是低于 0.5?
最小的例子:
猫与狗的二元分类。0是猫,1是狗。
我可以对 sigmoid 输出值执行以下解释吗:
或者这是否是解释结果的正确方法:
请注意,在第一种情况下,我们如何利用数值来表示概率,而在第二种情况下,我们完全忽略了概率解释并将答案折叠为二进制。哪个是正确的?你能解释一下为什么吗?
背景上下文,请随意跳过:
我发现许多来源表明是的,sigmoid 输出可以解释为概率:
tf.sigmoid(logits)给你概率。许多来源表明相反,sigmoid 输出不能解释为概率:
classification machine-learning probability neural-network sigmoid
classification ×10
r ×3
python ×2
scikit-learn ×2
auc ×1
chat ×1
convolution ×1
etl ×1
loss ×1
model ×1
probability ×1
regex ×1
regression ×1
rstudio ×1
sigmoid ×1
tensorflow ×1
text-mining ×1
tf-idf ×1