我想我已经正确实施了大部分内容.一部分让我困惑:
零频率问题:当每个类值没有出现属性值时,为每个属性值类组合(拉普拉斯估计器)的计数加1.
这是我的一些客户端代码:
//Clasify
string text = "Claim your free Macbook now!";
double posteriorProbSpam = classifier.Classify(text, "spam");
Console.WriteLine("-------------------------");
double posteriorProbHam = classifier.Classify(text, "ham");
Run Code Online (Sandbox Code Playgroud)
现在说某些地方的训练数据中有"免费"这个词
//Training
classifier.Train("ham", "Attention: Collect your Macbook from store.");
*Lot more here*
classifier.Train("spam", "Free macbook offer expiring.");
Run Code Online (Sandbox Code Playgroud)
但是这个词出现在我的"垃圾邮件"类别的培训数据中,而不是"火腿".所以当我去计算posteriorProbHam时,当我遇到"免费"这个词时我该怎么办.

我们正在尝试实现一种语义搜索算法,以根据用户的搜索词给出建议的类别。
目前,我们已经实现了朴素贝叶斯概率算法来返回数据中每个类别的概率,然后返回最高的概率。
然而,由于其天真,有时会得到错误的结果。
在不深入神经网络和其他极其复杂的东西的情况下,我们是否可以研究另一种替代方案?
我有一些非常烦人的问题让Naive Bayes分类器与文档术语矩阵一起工作.我确定我犯了一个非常简单的错误,但无法弄清楚它是什么.我的数据来自帐户电子表格.我被要求弄清楚哪些类别(文本格式:主要是部门名称或预算名称)更有可能在慈善机构上花钱,哪些(或者只是)花在私人公司上.他们建议我使用朴素贝叶斯分类器来做到这一点.我有大量的数据来训练一个模型和数十万行来测试模型.我已经准备好了字符串,用下划线替换了空格,用&+替换了&s,然后将每个类别视为一个术语:所以'酒精和毒瘾'成为:酒精+药物滥用.
一些示例行:
"environment+housing strategy+commissioning third_party_payments supporting_ppl_block_gross_chargeable" -> This row went to a charity
"west_north_west customer+tenancy premises h.r.a._special_maintenance" -> This row went to a private company.
Run Code Online (Sandbox Code Playgroud)
使用此示例作为模板,我编写了以下函数来提出我的文档术语矩阵(使用tm),用于训练和测试数据.
library(tm)
library(e1071)
getMatrix <- function(chrVect){
testsource <- VectorSource(chrVect)
testcorpus <- Corpus(testsource)
testcorpus <- tm_map(testcorpus,stripWhitespace)
testcorpus <- tm_map(testcorpus, removeWords,stopwords("english"))
testmatrix <- t(TermDocumentMatrix(testcorpus))
}
trainmatrix <- getMatrix(traindata$cats)
testmatrix <- getMatrix(testdata$cats)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.问题是当我尝试a)应用朴素贝叶斯模型和b)从该模型预测时.使用klar包 - 我得到零概率错误,因为许多术语只有一个类别的零实例并且使用laplace术语似乎不能解决这个问题.使用e1071,该模型有效,但是当我使用以下方法测试模型时:
model <- naiveBayes(as.matrix(trainmatrix),as.factor(traindata$Code))
rs<- predict(model, as.matrix(testdata$cats))
Run Code Online (Sandbox Code Playgroud)
......每个项目预测相同的类别,即使它们应该大致相等.模型中的某些东西显然不起作用.看一下模型$表中的一些术语 - 我可以看到许多私有的值和慈善的零值,反之亦然.我使用as.factor代码.
output:
rs 1 …Run Code Online (Sandbox Code Playgroud) 我需要对文本进行分类,我正在使用Text blob python模块来实现它.我可以使用朴素贝叶斯分类器/决策树.我担心下面提到的几点.
1)我需要将句子分类为参数/不是参数.我使用两个分类器并使用apt数据集训练模型.我的问题是关于我是否需要仅使用关键字训练模型?或者我可以用所有可能的参数和非参数样本句子训练数据集?哪个是文本分类准确性和检索时间方面的最佳方法?
2)由于分类是参数/不是参数,哪个分类器可以获取精确的结果?这是朴素贝叶斯/决策树/积极朴素的贝叶斯?
提前致谢.
我有一个简单的分层模型,有很多个人,我从正态分布中得到小样本.这些分布的均值也遵循正态分布.
import numpy as np
n_individuals = 200
points_per_individual = 10
means = np.random.normal(30, 12, n_individuals)
y = np.random.normal(means, 1, (points_per_individual, n_individuals))
Run Code Online (Sandbox Code Playgroud)
我想使用PyMC3从样本中计算模型参数.
import pymc3 as pm
import matplotlib.pyplot as plt
model = pm.Model()
with model:
model_means = pm.Normal('model_means', mu=35, sd=15)
y_obs = pm.Normal('y_obs', mu=model_means, sd=1, shape=n_individuals, observed=y)
trace = pm.sample(1000)
pm.traceplot(trace[100:], vars=['model_means'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
我期待后面model_means看起来像我原来的手段分布.但它似乎趋同于30手段的意思.如何从pymc3模型中恢复均值(我的例子中为12)的原始标准偏差?
我正在使用MCMCglmm包中的一些贝叶斯线性混合模型R.我的数据包括使用错误测量的预测变量.因此,我想建立一个考虑到这一点的模型.我的理解是,基本的混合效应模型MCMCglmm将仅对响应变量(如ols回归)中的误差最小化.换句话说,垂直误差将被最小化.我想最小化与回归线/平面/超平面正交的误差.
MCMCglmm或者我必须使用JAGS/STAN来进行变量误差(也就是总最小二乘)模型? 我在下面列出了一个数据集,其中一个随机变量height用错误来衡量,以说明基本设置MCMCglmm.
library(nlme)
library(MCMCglmm)
data(Orthodont)
set.seed(1234)
Orthodont$height <- c(rnorm(54, 170, 10), rnorm(54, 150, 10))
prior1 <- list(
B = list(mu = rep(0, 3), V = diag(1e+08, 3)),
G = list(G1 = list(V = 1, nu = 1, alpha.mu = 0, alpha.V = 1000)),
R = list(V = 1, nu = 0.002)
)
model1 <- MCMCglmm(
fixed = distance ~ height + Sex,
random …Run Code Online (Sandbox Code Playgroud) 我对"Dirichlet过程作为聚类数量的先验分布的无限混合模型"的理解是,当聚合到一定数量的聚类时,聚类的数量由数据决定.
这个R Implementation https://github.com/jacobian1980/ecostates以这种方式决定集群的数量.虽然,R implementation使用Gibbs采样器,我不确定是否会影响这一点.
令我困惑的是n_components参数.n_components: int, default 1 :
Number of mixture components. 如果组件的数量由数据和Dirichlet过程确定,那么这个参数是什么?
最终,我想得到:
(1)每个样本的聚类分配;
(2)每个聚类的概率向量; 和
(3)每个样本的似然/对数似然.
看起来(1)是predict方法,(3)是score方法.但是,(1)的输出完全取决于n_components超参数.
我的道歉,如果这是一个幼稚的问题,我很新的贝叶斯编程,发现有Dirichlet Process在Scikit-learn,我想试试.
这是文档:http: //scikit-learn.org/stable/modules/generated/sklearn.mixture.DPGMM.html#sklearn.mixture.DPGMM
以下是一个使用示例:http: //scikit-learn.org/stable/auto_examples/mixture/plot_gmm.html
这是我天真的用法:
from sklearn.mixture import DPGMM
X = pd.read_table("Data/processed/data.tsv", sep="\t", index_col=0)
Mod_dpgmm = DPGMM(n_components=3)
Mod_dpgmm.fit(X)
Run Code Online (Sandbox Code Playgroud) 我是比较新的PYMC3,我试图实现贝叶斯结构时间序列(BSTS)没有回归系数,比如模型拟合这里在R.模型如下:
我可以使用GaussianRandomWalk来实现局部线性趋势,如下所示:
delta = pymc3.GaussianRandomWalk('delta',mu=0,sd=1,shape=99)
mu = pymc3.GaussianRandomWalk('mu',mu=delta,sd=1,shape=100)
Run Code Online (Sandbox Code Playgroud)
但是,我对如何在PYMC3中编码季节性变量(tau)感到困惑。我是否需要参加自定义的随机游走课程,还是有其他技巧?
基于给定的网络结构,我为六个二进制变量(x1 到 x6)创建了一个包含 100 个实例的数据框。因此,它是存储在变量“input_params”中的 0/1 值的 100 x 6 数据帧。使用语句创建一个空图:
library(bnlearn)
bn_graph = empty.graph(names(input_params))
但是当我尝试使用以上参数('input_params')在网络中拟合时
bn_nw <- bn.fit(bn_graph, input_params)
我收到一条错误消息
Error in data.type(x) :
variable x1 is not supported in bnlearn (type: integer).
我应该进行什么数据类型转换才能避免此错误?现在它的值是 0 或 1。
这是我在 CatBoost 中应用 BayesSearch 的尝试:
from catboost import CatBoostClassifier
from skopt import BayesSearchCV
from sklearn.model_selection import StratifiedKFold
# Classifier
bayes_cv_tuner = BayesSearchCV(
estimator = CatBoostClassifier(
silent=True
),
search_spaces = {
'depth':(2,16),
'l2_leaf_reg':(1, 500),
'bagging_temperature':(1e-9, 1000, 'log-uniform'),
'border_count':(1,255),
'rsm':(0.01, 1.0, 'uniform'),
'random_strength':(1e-9, 10, 'log-uniform'),
'scale_pos_weight':(0.01, 1.0, 'uniform'),
},
scoring = 'roc_auc',
cv = StratifiedKFold(
n_splits=2,
shuffle=True,
random_state=72
),
n_jobs = 1,
n_iter = 100,
verbose = 1,
refit = True,
random_state = 72
)
Run Code Online (Sandbox Code Playgroud)
跟踪结果:
def status_print(optim_result):
"""Status callback durring bayesian …Run Code Online (Sandbox Code Playgroud) bayesian ×10
python ×4
r ×3
mcmc ×2
pymc3 ×2
python-3.x ×2
algorithm ×1
bnlearn ×1
catboost ×1
mixed-models ×1
naivebayes ×1
pandas ×1
pymc ×1
scikit-learn ×1
statistics ×1
tm ×1