我在 Python 中使用 statsmodels 进行逻辑回归分析。例如:
import statsmodels.api as sm
import numpy as np
x = arange(0,1,0.01)
y = np.random.rand(100)
y[y<=x] = 1
y[y!=1] = 0
x = sm.add_constant(x)
lr = sm.Logit(y,x)
result = lr.fit().summary()
Run Code Online (Sandbox Code Playgroud)
但我想为我的观察定义不同的权重。我组合了 4 个不同大小的数据集,并希望对分析进行加权,以便来自最大数据集的观察结果不会主导模型。
我是Python的数据分析的初学者,并且在使用这个特定的任务时遇到了麻烦.我搜索得相当广泛,但无法确定哪里出了问题.
我导入了一个文件并将其设置为数据帧.清除文件中的数据.但是,当我尝试将模型拟合到数据中时,我得到了一个
检测到完美分离,结果不可用
这是代码:
from scipy import stats
import numpy as np
import pandas as pd
import collections
import matplotlib.pyplot as plt
import statsmodels.api as sm
loansData = pd.read_csv('https://spark- public.s3.amazonaws.com/dataanalysis/loansData.csv')
loansData = loansData.to_csv('loansData_clean.csv', header=True, index=False)
## cleaning the file
loansData['Interest.Rate'] = loansData['Interest.Rate'].map(lambda x: round(float(x.rstrip('%')) / 100, 4))
loanlength = loansData['Loan.Length'].map(lambda x: x.strip('months'))
loansData['FICO.Range'] = loansData['FICO.Range'].map(lambda x: x.split('-'))
loansData['FICO.Range'] = loansData['FICO.Range'].map(lambda x: int(x[0]))
loansData['FICO.Score'] = loansData['FICO.Range']
#add interest rate less than column and populate
## we only care about interest rates …Run Code Online (Sandbox Code Playgroud) 在尝试udacity课程深度学习任务时,我遇到了将模型的预测与训练集的标签进行比较的问题.
from __future__ import print_function
import numpy as np
import tensorflow as tf
from six.moves import cPickle as pickle
from six.moves import range
pickle_file = 'notMNIST.pickle'
with open(pickle_file, 'rb') as f:
save = pickle.load(f)
train_dataset = save['train_dataset']
train_labels = save['train_labels']
valid_dataset = save['valid_dataset']
valid_labels = save['valid_labels']
test_dataset = save['test_dataset']
test_labels = save['test_labels']
del save # hint to help gc free up memory
print('Training set', train_dataset.shape, train_labels.shape)
print('Validation set', valid_dataset.shape, valid_labels.shape)
print('Test set', test_dataset.shape, test_labels.shape)
Run Code Online (Sandbox Code Playgroud)
这使输出为:
训练集(200000,28,28)(200000,)
验证集(10000,28,28)(10000,)
测试集(10000,28,28)(10000,)
# With …Run Code Online (Sandbox Code Playgroud) python comparison numpy machine-learning logistic-regression
我一直在上神经网络课,并不真正理解为什么我从逻辑回归和两层神经网络(输入层和输出层)的准确度得分得到不同的结果.输出层使用sigmoid激活功能.根据我的学习,我们可以使用神经网络中的sigmoid激活函数来计算概率.如果与逻辑回归试图完成的内容完全相同,这应该非常相似.然后从那里backpropogate使用梯度下降最小化错误.可能有一个简单的解释,但我不明白为什么准确性得分变化如此之大.在这个例子中,我没有使用任何训练或测试集,只是简单的数据来演示我不理解的东西.
逻辑回归的准确率为71.4%.在下面的例子中,我刚刚为'X'和结果'y'数组创建了数字.当结果等于'1'时,我故意使'X'的数字更高,以便线性分类器可以具有一定的准确性.
import numpy as np
from sklearn.linear_model import LogisticRegression
X = np.array([[200, 100], [320, 90], [150, 60], [170, 20], [169, 75], [190, 65], [212, 132]])
y = np.array([[1], [1], [0], [0], [0], [0], [1]])
clf = LogisticRegression()
clf.fit(X,y)
clf.score(X,y) ##This results in a 71.4% accuracy score for logistic regression
Run Code Online (Sandbox Code Playgroud)
然而,当我实现一个没有隐藏层的神经网络时,只需对单节点输出层使用sigmoid激活函数(因此总共有两层,输入和输出层).我的准确率分数约为42.9%?为什么这与逻辑回归准确度得分显着不同?为什么这么低?
import keras
from keras.models import Sequential
from keras.utils.np_utils import to_categorical
from keras.layers import Dense, Dropout, Activation
model = Sequential()
#Create a neural network with 2 input nodes for the …Run Code Online (Sandbox Code Playgroud) python machine-learning neural-network logistic-regression keras
我正在尝试在 Jupyter Notebook 上运行以下代码:
lr = LogisticRegression(class_weight='balanced')
lr.fit(X_train,y_train)
y_pred = lr.predict(X_train)
acc_log = round(lr.score(X_train, y_train) * 100, 2)
prec_log = round(precision_score(y_train,y_pred) * 100,2)
recall_log = round(recall_score(y_train,y_pred) * 100,2)
f1_log = round(f1_score(y_train,y_pred) * 100,2)
roc_auc_log = roc_auc_score(y_train,y_pred)
Run Code Online (Sandbox Code Playgroud)
当尝试执行此操作时,我收到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-bcb2d9729eb6> in <module>
6 prec_log = round(precision_score(y_train,y_pred) * 100,2)
7 recall_log = round(recall_score(y_train,y_pred) * 100,2)
----> 8 f1_log = round(f1_score(y_train,y_pred) * 100,2)
9 roc_auc_log = roc_auc_score(y_train,y_pred)
TypeError: 'numpy.float64' object is not callable
Run Code Online (Sandbox Code Playgroud)
似乎无法弄清楚我做错了什么。
尝试将 glmnet() 与 family="binomial" 拟合时出现此错误,用于逻辑回归拟合:
> data <- read.csv("DAFMM_HE16_matrix.csv", header=F)
> x <- as.data.frame(data[,1:3])
> x <- model.matrix(~.,data=x)
> y <- data[,4]
> train=sample(1:dim(x)[1],287,replace=FALSE)
> xTrain=x[train,]
> xTest=x[-train,]
> yTrain=y[train]
> yTest=y[-train]
> fit = glmnet(xTrain,yTrain,family="binomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has 1 or 0 observations; not allowed
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激 - 我已经在互联网上搜索过,但没有找到任何有帮助的东西
编辑:
以下是数据的样子:
> data
V1 V2 V3 V4
1 34927.00 156.60 20321 -12.60
2 34800.00 156.60 19811 …Run Code Online (Sandbox Code Playgroud) 我在 R 中使用响应变量,即学生在特定课程中收到的字母等级。响应是有序的,在我看来,在逻辑上似乎是成正比的。我的理解是,在使用 polr() 而不是 multinom() 之前,我需要测试它是否成比例。
对于我的一门数据课程,我“测试”了这样的比例:
M1 <- logLik(polrModel) #'log Lik.' -1748.180691 (df=8)
M2 <- logLik(multinomModel) #'log Lik.' -1734.775727 (df=20)
G <- -2*(M1$1 - M2$2)) #I used a block bracket here in the real code
# 26.8099283
pchisq(G,12,lower.tail = FALSE) #DF is #of predictors
#0.008228890393 #THIS P-VAL TELLS ME TO REJECT PROPORTIONAL
Run Code Online (Sandbox Code Playgroud)
对于测试比例优势假设的第二种方法,我还运行了两个 vglm 模型,一个与family=cumulative(parallel =TRUE)另一个与family=cumulative(parallel =FALSE). 然后我pchisq()用模型偏差的差异和剩余自由度的差异进行了测试。
这两种方式中的任何一种都值得尊敬吗?如果没有,我很乐意帮助您确定是否接受或拒绝比例几率假设的实际编码!
除了上述两个测试之外,我还分别针对每个预测变量绘制了我的累积概率图。我读到我希望这些线平行。我不明白的是,polr()您的输出是每个自变量(系数)的单个斜率,然后是特定的截距,具体取决于您使用的累积概率(例如:P(Y<=A), P( Y<=B) 等)。那么,如果每个方程的斜率系数都相同,那么这些线怎么可能不平行?
我在 Chris Bilder 的 YouTube 课程中学习了我的基础知识;他在第 …
我已经使用 spark mllib 运行了二元逻辑回归。根据 spark mllib 的文档,RawPrediction 是置信值,我假设 lcl 和 ucl 的概率。我正在获取 RawPrediction 的 -ve 值。在什么情况下,原始预测值可以是 -ve
无法修复以下逻辑回归的以下错误
training=(IBM$Serial<625)
data=IBM[!training,]
dim(data)
stock.direction <- data$Direction
training_model=glm(stock.direction~data$lag2,data=data,family=binomial)
###Error### ---- Error in eval(family$initialize) : y values must be 0 <= y <= 1
Run Code Online (Sandbox Code Playgroud)
我正在使用的数据中的几行
X Date Open High Low Close Adj.Close Volume Return lag1 lag2 lag3 Direction Serial
1 28-11-2012 190.979996 192.039993 189.270004 191.979996 165.107727 3603600 0.004010855 0.004010855 -0.001198021 -0.006354834 Up 1
2 29-11-2012 192.75 192.899994 190.199997 191.529999 164.720734 4077900 0.00114865 0.00114865 -0.004020279 -0.009502386 Up 2
3 30-11-2012 191.75 192 189.5 190.070007 163.465073 4936400 0.003630178 0.003630178 -0.001894039 -0.005576956 Up 3 …Run Code Online (Sandbox Code Playgroud) 我有一个用 Python scikit-learn 构建的模型。我知道模型可以保存为 Pickle 或 Joblib 格式。是否有任何现有方法可以将作业保存为 JSON 格式?请参阅下面的模型构建代码以供参考:
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import pickle
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names =['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)
# Fit the model on 33%
model = LogisticRegression()
model.fit(X_train, Y_train)
filename = 'finalized_model.sav'
pickle.dump(model, open(filename, 'wb'))
Run Code Online (Sandbox Code Playgroud) python ×6
r ×3
numpy ×2
scikit-learn ×2
apache-spark ×1
comparison ×1
glmnet ×1
json ×1
keras ×1
matplotlib ×1
pandas ×1
r-factor ×1
regression ×1
sample ×1
statsmodels ×1