我创建了一个基于似然函数和模拟的概率模拟,所有这些都可以用下面的代码复制。
这是似然函数:
probit.ll <- function(par,ytilde,x) {
a <- par[1]
b <- par[2]
return( -sum( pnorm(ytilde*(a + b*x),log=TRUE) ))
}
Run Code Online (Sandbox Code Playgroud)
这是进行估计的函数:
my.probit <- function(y,x) {
# use OLS to get start values
par <- lm(y~x)$coefficients
ytilde <- 2*y-1
# Run optim
res <- optim(par,probit.ll,hessian=TRUE,ytilde=ytilde,x=x)
# Return point estimates and SE based on the inverse of Hessian
names(res$par) <- c('a','b')
se=sqrt(diag(solve(res$hessian)))
names(se) <- c('a','b')
return(list(par=res$par,se=se,cov=solve(res$hessian)))
}
Run Code Online (Sandbox Code Playgroud)
这是生成模拟模型的函数:
probit.data <- function(N=100,a=1,b=1) {
x <- rnorm(N)
y.star <- a + b*x + rnorm(N)
y …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将多元线性回归模型与statsmodels.api
. 我收到一个错误MissingDataError: exog contains inf or nans
。我检查了 nan 和 inf,但没有找到。这怎么可能?为什么我会收到此错误?
代码
import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
df = pd.read_csv('clean_df.csv')
x_multi = df.drop('price', axis=1) #feature variables.
x_multi_cons = sm.add_constant(x_multi) #add row of constants.
Run Code Online (Sandbox Code Playgroud)
我检查了所有 exog 变量的 na 值,但没有发现任何值。
x_multi_cons.isna().sum()
const 0
crime_rate 0
resid_area 0
air_qual 0
room_num 0
age 0
teachers 0
poor_prop 0
n_hos_beds 8
n_hot_rooms 0
rainfall 0
parks 0
avg_dist 0
airport_YES …
Run Code Online (Sandbox Code Playgroud) 我一直在使用 glmnet R 包为一个目标变量 Y(数字)和 762 个协变量构建 LASSO 回归模型。我使用 glmnet() 函数,然后coef(fit, s = 0.056360)
获取该特定 lambda 值的系数值。
我现在需要的是变量选择顺序,即首先选择选定的协变量中的哪一个(首先进入模型),第二个,第三个等等。
使用时,plot(fit, label = TRUE)
理论上我可以通过绘制的路径看到顺序,但是,协变量太多,标签难以辨认。
从图像中可以看到,第一个协变量是 267(绿色路径),然后是 12,但其余的难以辨认。
我正在尝试运行一个简单的 GBM 分类模型来对随机森林和 SVM 的性能进行基准测试,但是我无法让模型正确评分。它没有抛出错误,但预测都是 NaN。我正在使用来自mlbench
. 这是代码:
library(gbm)
library(mlbench)
library(caret)
library(plyr)
library(ada)
library(randomForest)
data(BreastCancer)
bc <- BreastCancer
rm(BreastCancer)
bc$Id <- NULL
bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))
index <- createDataPartition(bc$Class, p = 0.7, list = FALSE)
bc.train <- bc[index, ]
bc.test <- bc[-index, ]
model.gbm <- gbm(Class ~ ., data = bc.train, n.trees = 500)
pred.gbm <- predict(model.gbm, bc.test.ind, n.trees = 500, type = "response")
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解决我做错了什么吗?另外,我是否必须转换预测函数的输出?我读过这似乎是 GBM 预测的一个问题。谢谢。
使用 R,我尝试修改使用 cv.glmnet 执行岭回归得到的标准图。
我执行岭回归
lam = 10 ^ seq (-2,3, length =100)
cvfit = cv.glmnet(xTrain, yTrain, alpha = 0, lambda = lam)
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来绘制系数与 log lambda 的关系
plot(cvfit $glmnet.fit, "lambda")
Run Code Online (Sandbox Code Playgroud)
如何根据实际 lambda 值(不是 log lambda)绘制系数并在图上标记每个预测变量?
lme4
我正在R 中使用混合模型:
full_mod3=lmer(logcptplus1 ~ logdepth*logcobb + (1|fyear) + (1 |flocation),
data=cpt, REML=TRUE)
Run Code Online (Sandbox Code Playgroud)
概括:
Formula: logcptplus1 ~ logdepth * logcobb + (1 | fyear) + (1 | flocation)
Data: cpt
REML criterion at convergence: 577.5
Scaled residuals:
Min 1Q Median 3Q Max
-2.7797 -0.5431 0.0248 0.6562 2.1733
Random effects:
Groups Name Variance Std.Dev.
fyear (Intercept) 0.2254 0.4748
flocation (Intercept) 0.1557 0.3946
Residual 0.9663 0.9830
Number of obs: 193, groups: fyear, 16; flocation, 16
Fixed effects:
Estimate Std. Error t value …
Run Code Online (Sandbox Code Playgroud) 我有下面的数据框:
Val1<-c(0.5,0.7,0.8,0.9)
Val2<-c(0.5,0.7,0.8,0.9)
Val3<-c(0.5,0.7,0.8,0.9)
Val4<-c(0.5,0.7,0.8,0.9)
vales<-data.frame(Val1,Val2,Val3,Val4)
row.names(vales)<-c("asd","dasd","dfsdf","fdff")
Run Code Online (Sandbox Code Playgroud)
我对其进行了正确处理,以便使用以下命令创建聚类散点图:
library(tidyverse) # data manipulation
library(cluster) # clustering algorithms
library(factoextra) # clustering algorithms & visualization
library(plotly)
cl<-scale(vales)
dist <- get_dist(cl)
k2 <- kmeans(cl, centers = 2, nstart = 25)
cl %>%
as_tibble() %>%
mutate(cluster = k2$cluster,
state = row.names(vales))
p2<-fviz_cluster(k2, data = cl)
p2+geom_text(aes(label=""))
#or
ggplotly(p2+geom_text(aes(label="")))
Run Code Online (Sandbox Code Playgroud)
我想删除点的标签,但我不明白为什么它们出现,而在下面的情况下却没有出现。
df <- USArrests
df <- na.omit(df)
df <- scale(df)
distance <- get_dist(df)
k2 <- kmeans(df, centers = 2, nstart = 25)
df %>%
as_tibble() %>%
mutate(cluster …
Run Code Online (Sandbox Code Playgroud) 在处理我的项目时,我从测试数据中获得了一个混淆矩阵,如下所示:
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cm
Run Code Online (Sandbox Code Playgroud)
输出为:
array([[1102, 88],
[ 85, 725]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
使用seaborn和matplotlib,我使用代码将其可视化:
import seaborn as sns
import matplotlib.pyplot as plt
ax= plt.subplot();
sns.heatmap(cm, annot=True,cmap='Blues',ax=ax);
# labels, title and ticks
ax.set_xlabel('Predicted labels');ax.set_ylabel('True labels');
ax.set_ylim(2.0, 0)
ax.set_title('Confusion Matrix');
ax.xaxis.set_ticklabels(['Fake','Real']);
ax.yaxis.set_ticklabels(['Fake','Real']);
Run Code Online (Sandbox Code Playgroud)
得到的输出是:
问题是 3 位数字(此处 1102 显示为 11e+03)或以上的值以指数形式显示。
有没有办法以正常形式显示它?
我有一个下面列出的序列的原始数据帧,我尝试使用 one-hot 编码,然后将它们存储在一个新的数据帧中,我尝试使用以下代码执行此操作,但无法存储,因为我之后得到以下输出:
代码:
onehot_encoder = OneHotEncoder()
sequence = np.array(list(x_train['sequence'])).reshape(-1, 1)
encoded_sequence = onehot_encoder.fit_transform(sequence).toarray()
encoded_sequence
Run Code Online (Sandbox Code Playgroud)
但出现错误
ValueError: Wrong number of items passed 12755, placement implies 1
Run Code Online (Sandbox Code Playgroud) 我正在提取两个不同组的回归结果,如下面的示例所示。在temp
data.frame 中,我得到估计值、std.error、统计量和 p 值。但是,我没有得到置信区间。有没有一种简单的方法来提取它们?
df <- tibble(
a = rnorm(1000),
b = rnorm(1000),
c = rnorm(1000),
d = rnorm(1000),
group = rbinom(n=1000, size=1, prob=0.5)
)
df$group = as.factor(df$group)
temp <- df %>%
group_by(group) %>%
do(model1 = tidy(lm(a ~ b + c + d, data = .))) %>%
gather(model_name, model, -group) %>%
unnest()
Run Code Online (Sandbox Code Playgroud) r ×7
python ×3
glmnet ×2
regression ×2
broom ×1
factoextra ×1
gbm ×1
ggplot2 ×1
ggplotly ×1
lme4 ×1
matplotlib ×1
scikit-learn ×1
seaborn ×1
statsmodels ×1