我有一些预测变量和二进制目标的数据.例如:
df <- data.frame(a=sort(sample(1:100,30)), b= sort(sample(1:100,30)),
target=c(rep(0,11),rep(1,4),rep(0,4),rep(1,11)))
Run Code Online (Sandbox Code Playgroud)
我使用了一个logistic regresion模型 glm()
model1 <- glm(formula= target ~ a + b, data=df, family=binomial)
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试预测输出(例如,相同的数据应该足够)
predict(model1, newdata=df, type="response")
Run Code Online (Sandbox Code Playgroud)
这生成概率数的向量.但我想预测实际的课程.我可以在概率数上使用round(),但这假设低于0.5的任何东西都是'0'类,而上面的任何东西都是'1'类.这是正确的假设吗?即使每个阶级的人口可能不相等(或接近相等)?或者有没有办法估算这个门槛?
我试图对320,000行数据(6个变量)进行逻辑回归.对数据样本(10000)的逐步模型选择给出了具有5个交互项的相当复杂的模型:Y~X1+ X2*X3+ X2*X4+ X2*X5+ X3*X6+ X4*X5
.该glm()
函数可以使该行模型具有10000行数据,但不适用于整个数据集(320,000).
使用bigglm
由块从SQL Server导致错误读取数据块,而我不能让从结果的意义traceback()
:
fit <- bigglm(Y~X1+ X2*X3+ X2*X4+ X2*X5+ X3*X6+ X4*X5,
data=sqlQuery(myconn,train_dat),family=binomial(link="logit"),
chunksize=1000, maxit=10)
Error in coef.bigqr(object$qr) :
NA/NaN/Inf in foreign function call (arg 3)
> traceback()
11: .Fortran("regcf", as.integer(p), as.integer(p * p/2), bigQR$D,
bigQR$rbar, bigQR$thetab, bigQR$tol, beta = numeric(p), nreq = as.integer(nvar),
ier = integer(1), DUP = FALSE)
10: coef.bigqr(object$qr)
9: coef(object$qr)
8: coef.biglm(iwlm)
7: coef(iwlm)
6: bigglm.function(formula = formula, data = datafun, ...)
5: bigglm(formula …
Run Code Online (Sandbox Code Playgroud) 我尝试使用Spark MLlib Logistic回归(LR)和/或随机森林(RF)分类器来创建模型来描述由基数重新组合的两个类之间的基数差异很大.
其中一组有1.5亿个负面因素,另有一组只有5万个正面情况.
在使用默认参数训练LR和RF分类器之后,我得到两个分类器的非常相似的结果,例如,对于以下测试集:
Test instances: 26842
Test positives = 433.0
Test negatives = 26409.0
Run Code Online (Sandbox Code Playgroud)
分类器检测到:
truePositives = 0.0
trueNegatives = 26409.0
falsePositives = 433.0
falseNegatives = 0.0
Precision = 0.9838685641904478
Recall = 0.9838685641904478
Run Code Online (Sandbox Code Playgroud)
看起来分类器根本无法检测到任何正面实例.此外,无论数据是如何分成训练和测试集,分类提供相同数量的false positives
相等的若干positives
该测试设置真的有.
LR分类器默认阈值设置为0.5设置阈值为0.8没有任何区别.
val model = new LogisticRegressionWithLBFGS().run(training)
model.setThreshold(0.8)
Run Code Online (Sandbox Code Playgroud)
问题:
1)请告知如何操纵分类器阈值,使分类器对具有一小部分正实例的类与具有大量负实例的类更具敏感性?
2)任何其他MLlib分类器来解决这个问题?
3)itercept
Logistic回归算法有哪些参数?
val model = new LogisticRegressionWithSGD().setIntercept(true).run(training)
Run Code Online (Sandbox Code Playgroud) random-forest logistic-regression apache-spark apache-spark-mllib
我有一些二进制数据,我想绘制逻辑回归线和同一图中0和1的相对频率的直方图.
我在这里使用popbio软件包遇到了一个非常好的实现:shizuka lab的页面
这里有一个与图书馆(popbio)一起运行的MWE(礼貌的shizuka实验室)
bodysize=rnorm(20,30,2) # generates 20 values, with mean of 30 & s.d.=2
bodysize=sort(bodysize) # sorts these values in ascending order.
survive=c(0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1) # assign 'survival' to these 20 individuals non-randomly... most mortality occurs at smaller body size
dat=as.data.frame(cbind(bodysize,survive))
#and now the plot
library(popbio)
logi.hist.plot(bodysize,survive,boxp=FALSE,type="hist",col="gray")
Run Code Online (Sandbox Code Playgroud)
哪个产生
我目前的工作在哪里机器学习项目-给定数据矩阵Z
和矢量rho
-我有计算的价值和坡度逻辑损失函数的rho
.计算涉及基本矩阵向量乘法和log/exp运算,以避免数值溢出(在上一篇文章中描述).
我目前正在使用NumPy在Python中执行此操作,如下所示(作为参考,此代码运行时间为0.2秒).虽然这很好用,但我想加快速度,因为我在代码中多次调用该函数(它代表了我项目中90%以上的计算).
我正在寻找任何方法来改善没有并行化的代码的运行时间(即只有1个CPU).我很高兴使用Python中任何公开的软件包,或者调用C或C++(因为我听说这可以将运行时间提高一个数量级).预处理数据矩阵Z
也没问题.可能更好的计算被利用有些事情是该矢量rho
通常是稀疏的(有50%左右的条目= 0),而且通常远远高于列更多的行(在大多数情况下n_cols <= 100
)
import time
import numpy as np
np.__config__.show() #make sure BLAS/LAPACK is being used
np.random.seed(seed = 0)
#initialize data matrix X and label vector Y
n_rows, n_cols = 1e6, 100
X = np.random.random(size=(n_rows, n_cols))
Y = np.random.randint(low=0, high=2, size=(n_rows, 1))
Y[Y==0] = -1
Z = X*Y # all operations are carried out on Z …
Run Code Online (Sandbox Code Playgroud) 我有8670个试验的训练数据集,每个试验的样本长度为125次,而我的测试集包含578个试验.当我从scikit-learn应用SVM算法时,我得到了相当不错的结果.
但是,当我应用逻辑回归时,会发生以下错误:
"ValueError:此解算器需要数据中至少有2个类的样本,但数据只包含一个类:1.0".
我的问题是为什么SVM能够给出预测,但逻辑回归给出了这个错误?
数据集中是否有可能出现问题,或者只是因为训练样本看起来类似于逻辑回归而无法进行分类?
我正在使用scikit learn的Logistic回归来解决多类问题.
logit = LogisticRegression(penalty='l1')
logit = logit.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
我对推动这一决定的特征感兴趣.
logit.coef_
Run Code Online (Sandbox Code Playgroud)
上面给了我一个漂亮的数据帧(n_classes, n_features)
格式,但所有的类和功能名称都消失了.有了功能,这没关系,因为假设它们的索引方式与我传递它们的方式相同似乎是安全的......
但是对于类,这是一个问题,因为我从未以任何顺序明确地传入类.那么哪个类做系数集(数据帧中的行)0,1,2和3属于哪个?
在航班延误数据集的版本中使用LogisticRegression
类.scikit-learn
我pandas
用来选择一些列:
df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]
Run Code Online (Sandbox Code Playgroud)
我NaN
用0 填写值:
df = df.fillna({'ARR_DEL15': 0})
Run Code Online (Sandbox Code Playgroud)
确保分类列标有"类别"数据类型:
df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')
Run Code Online (Sandbox Code Playgroud)
然后调用get_dummies()
来自pandas
:
df = pd.get_dummies(df)
Run Code Online (Sandbox Code Playgroud)
现在我训练和测试我的数据集:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
test_set, train_set = train_test_split(df, test_size=0.2, random_state=42)
train_set_x = train_set.drop('ARR_DEL15', axis=1)
train_set_y = train_set["ARR_DEL15"]
test_set_x = test_set.drop('ARR_DEL15', axis=1)
test_set_y = test_set["ARR_DEL15"]
lr.fit(train_set_x, train_set_y)
Run Code Online (Sandbox Code Playgroud)
一旦我调用该score
方法,我就会得到0.867.但是,当我调用该roc_auc_score
方法时,我得到的数字大约低于0.583
probabilities = lr.predict_proba(test_set_x)
roc_auc_score(test_set_y, …
Run Code Online (Sandbox Code Playgroud) classification machine-learning scikit-learn logistic-regression auc
如何使用sklearn库在逻辑回归模型中使用内核?
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
print(y_pred)
print(confusion_matrix(y_test,y_pred))
print(classification_report(y_test,y_pred))
predicted= logreg.predict(predict)
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Run Code Online (Sandbox Code Playgroud) kernel machine-learning svm scikit-learn logistic-regression
我正在使用mord
(scikitlearn
)库进行有序(即多项式)岭回归。
y
是包含1到19的整数值的单列。
X
由7个数值变量组成,这些数值变量存储在4个存储桶中,并被赋值为最终的28个二进制变量。
import pandas as pd
import numpy as np
from sklearn import metrics
from sklearn.model_selection import train_test_split
import mord
in_X, out_X, in_y, out_y = train_test_split(X, y,
stratify=y,
test_size=0.3,
random_state=42)
mul_lr = mord.OrdinalRidge(alpha=1.0,
fit_intercept=True,
normalize=False,
copy_X=True,
max_iter=None,
tol=0.001,
solver='auto').fit(in_X, in_y)
Run Code Online (Sandbox Code Playgroud)
mul_lr.coef_
返回[28 x 1]数组,但mul_lr.intercept_
返回单个值(而不是19)。
知道我缺少什么吗?
scikit-learn ×5
python ×4
r ×3
glm ×2
svm ×2
apache-spark ×1
auc ×1
c ×1
ggplot2 ×1
histogram ×1
kernel ×1
numpy ×1
predict ×1
python-3.x ×1