我需要知道如何以这样一种方式返回逻辑回归系数,即我可以自己生成预测概率.
我的代码看起来像这样:
lr = LogisticRegression()
lr.fit(training_data, binary_labels)
# Generate probabities automatically
predicted_probs = lr.predict_proba(binary_labels)
Run Code Online (Sandbox Code Playgroud)
我假设lr.coeff_值将遵循典型的逻辑回归,因此我可以返回预测的概率,如下所示:
sigmoid( dot([val1, val2, offset], lr.coef_.T) )
Run Code Online (Sandbox Code Playgroud)
但这不是合适的表述.有没有人有适当的格式来生成Scikit Learn LogisticRegression的预测概率?谢谢!
我正在尝试使用vowpal wabbit进行逻辑回归.我不确定这是否是正确的语法
For training, I do
./vw -d ~/Desktop/new_data.txt --passes 20 --binary --cache_file cache.txt -f lr.vw --loss_function logistic --l1 0.05
For testing I do
./vw -d ~/libsvm-3.18_test/matlab/new_data_test.txt --binary -t -i lr.vw -p predictions.txt -r raw_score.txt
Run Code Online (Sandbox Code Playgroud)
这是我的火车数据的片段
-1:1.00038 | 110:0.30103 262:0.90309 689:1.20412 1103:0.477121 1286:1.5563 2663:0.30103 2667:0.30103 2715:4.63112 3012:0.30103 3113:8.38411 3119:4.62325 3382:1.07918 3666:1.20412 3728:5.14959 4029:0.30103 4596:0.30103
1:2601.25 | 32:2.03342 135:3.77379 146:3.19535 284:2.5563 408:0.30103 542:3.80618 669:1.07918 689:2.25527 880:0.30103 915:1.98227 1169:5.35371 1270:0.90309 1425:0.30103 1621:0.30103 1682:0.30103 1736:3.98227 1770:0.60206 1861:4.34341 1900:3.43136 1905:7.54141 1991:5.33791 2437:0.954243 2532:2.68664 3370:2.90309 …Run Code Online (Sandbox Code Playgroud) 我想用Logistic回归模型预测交叉验证的概率.我知道您可以获得交叉验证分数,但是可以从predict_proba而不是分数返回值吗?
# imports
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import (StratifiedKFold, cross_val_score,
train_test_split)
from sklearn import datasets
# setup data
iris = datasets.load_iris()
X = iris.data
y = iris.target
# setup model
cv = StratifiedKFold(y, 10)
logreg = LogisticRegression()
# cross-validation scores
scores = cross_val_score(logreg, X, y, cv=cv)
# predict probabilities
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y)
logreg.fit(Xtrain, ytrain)
proba = logreg.predict_proba(Xtest)
Run Code Online (Sandbox Code Playgroud) 该LogisticRegression.predict_proba功能究竟返回了什么?
在我的例子中,我得到这样的结果:
[[ 4.65761066e-03 9.95342389e-01]
[ 9.75851270e-01 2.41487300e-02]
[ 9.99983374e-01 1.66258341e-05]]
Run Code Online (Sandbox Code Playgroud)
从其他计算中,我知道,使用sigmoid函数,第二列是概率.该文件说,第一列是n_samples,但那是不可能的,因为我的样品的评价,这是文字和数字没有.文档还说,第二列是n_classes.这当然不可能,因为我只有两个类(即+1和-1),并且该函数应该是关于计算真正属于类的样本的概率,而不是类本身.
真正的第一列是什么?它为什么存在?
python machine-learning probability scikit-learn logistic-regression
我目前正在尝试使用逻辑回归创建二元分类。目前我正在确定特征重要性。我已经进行了数据预处理(一次热编码和采样)并使用 XGBoost 和 RandomFOrestClassifier 运行它,没问题
但是,当我尝试拟合 LogisticRegression 模型时(以下是我在 Notebook 中的代码),
from sklearn.linear_model import LogisticRegression
#Logistic Regression
# fit the model
model = LogisticRegression()
# fit the model
model.fit(np.array(X_over), np.array(y_over))
# get importance
importance = model.coef_[0]
# summarize feature importance
df_imp = pd.DataFrame({'feature':list(X_over.columns), 'importance':importance})
display(df_imp.sort_values('importance', ascending=False).head(20))
# plot feature importance
plt.bar(list(X_over.columns), importance)
plt.show()
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误
...
~\AppData\Local\Continuum\anaconda3\lib\site-packages\joblib\parallel.py in <listcomp>(.0)
223 with parallel_backend(self._backend, n_jobs=self._n_jobs):
224 return [func(*args, **kwargs)
--> 225 for func, args, kwargs in self.items]
226
227 def __len__(self):
~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py in _logistic_regression_path(X, …Run Code Online (Sandbox Code Playgroud) C中的参数是什么意思sklearn.linear_model.LogisticRegression?它如何影响决策边界?高值会使C决策边界非线性吗?如果我们可视化决策边界,逻辑回归的过度拟合会是什么样子?
python machine-learning scikit-learn logistic-regression overfitting-underfitting
我正在尝试使用spark进行一些简单的机器学习任务.我使用pyspark和spark 1.2.0来做一个简单的逻辑回归问题.我有120万条培训记录,我记录了记录的功能.当我将散列函数的数量设置为1024时,程序运行正常,但是当我将散列函数的数量设置为16384时,程序会多次失败并出现以下错误:
Py4JJavaError: An error occurred while calling o84.trainLogisticRegressionModelWithSGD.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 4.0 failed 4 times, most recent failure: Lost task 1.3 in stage 4.0 (TID 9, workernode0.sparkexperience4a7.d5.internal.cloudapp.net): java.lang.RuntimeException: java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828)
at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:123)
at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:132)
at org.apache.spark.storage.BlockManager.doGetLocal(BlockManager.scala:517)
at org.apache.spark.storage.BlockManager.getBlockData(BlockManager.scala:307)
at org.apache.spark.network.netty.NettyBlockRpcServer$$anonfun$2.apply(NettyBlockRpcServer.scala:57)
at org.apache.spark.network.netty.NettyBlockRpcServer$$anonfun$2.apply(NettyBlockRpcServer.scala:57)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108)
at org.apache.spark.network.netty.NettyBlockRpcServer.receive(NettyBlockRpcServer.scala:57)
at org.apache.spark.network.server.TransportRequestHandler.processRpcRequest(TransportRequestHandler.java:124)
at org.apache.spark.network.server.TransportRequestHandler.handle(TransportRequestHandler.java:97)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:91)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:44)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) …Run Code Online (Sandbox Code Playgroud) python java distributed-computing logistic-regression apache-spark
我已经开始使用Vowpal Wabbit进行逻辑回归,但是我无法重现它给出的结果.也许它有一些无证的"魔法",但有没有人能够复制/验证/检查逻辑回归的计算?
例如,通过下面的简单数据,我们的目标是模拟age预测的方式label.很明显,当年龄增加观察到1增加的可能性时,存在强烈的关系.
作为一个简单的单元测试,我使用了下面的12行数据:
age label
20 0
25 0
30 0
35 0
40 0
50 0
60 1
65 0
70 1
75 1
77 1
80 1
Run Code Online (Sandbox Code Playgroud)
现在,使用R,SPSS或甚至手动对此数据集执行逻辑回归,生成一个看起来像的模型 L = 0.2294*age - 14.08.因此,如果我使用年龄,并使用logit变换prob = 1 /(1 + EXP(-L)),我可以获得预测的概率,其范围从0.0001第一行到0.9864最后一行,如合理预期的那样.
如果我在Vowpal Wabbit插入相同的数据,
-1 'P1 |f age:20
-1 'P2 |f age:25
-1 'P3 |f age:30
-1 'P4 |f age:35
-1 'P5 |f age:40 …Run Code Online (Sandbox Code Playgroud) 我正在实施逻辑回归.我设法从中获取概率,并且能够预测2级分类任务.
我的问题是:
对于我的最终模型,我有权重和训练数据.有2个功能,所以我的重量是一个2行的向量.
我如何绘制这个?我看过这篇文章,但我不太明白答案.我需要等高线图吗?
我正在使用批量梯度下降实现逻辑回归.输入样本有两类要分类.类是1和0.在训练数据时,我使用以下sigmoid函数:
t = 1 ./ (1 + exp(-z));
Run Code Online (Sandbox Code Playgroud)
哪里
z = x*theta
Run Code Online (Sandbox Code Playgroud)
我使用以下成本函数来计算成本,以确定何时停止培训.
function cost = computeCost(x, y, theta)
htheta = sigmoid(x*theta);
cost = sum(-y .* log(htheta) - (1-y) .* log(1-htheta));
end
Run Code Online (Sandbox Code Playgroud)
我在每一步的成本都是NaN,因为htheta在大多数情况下,值为1或0.我该怎么做才能确定每次迭代的成本价值?
这是逻辑回归的梯度下降代码:
function [theta,cost_history] = batchGD(x,y,theta,alpha)
cost_history = zeros(1000,1);
for iter=1:1000
htheta = sigmoid(x*theta);
new_theta = zeros(size(theta,1),1);
for feature=1:size(theta,1)
new_theta(feature) = theta(feature) - alpha * sum((htheta - y) .*x(:,feature))
end
theta = new_theta;
cost_history(iter) = computeCost(x,y,theta);
end
end
Run Code Online (Sandbox Code Playgroud) matlab classification machine-learning gradient-descent logistic-regression
python ×6
scikit-learn ×6
vowpalwabbit ×2
apache-spark ×1
java ×1
matlab ×1
matplotlib ×1
probability ×1