鉴于 one-hot编码和虚拟编码之间的区别,pandas.get_dummies使用默认参数(即drop_first=False)时,方法是单热编码?
如果是这样,我从逻辑回归模型中删除截距是否有意义?这是一个例子:
# I assume I have already my dataset in a DataFrame X and the true labels in y
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X = pd.get_dummies(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .80)
clf = LogisticRegression(fit_intercept=False)
clf.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud) 我在逻辑回归教程中经历了这个优势比,并尝试使用scikit-learn的逻辑回归模块得到完全相同的结果.使用下面的代码,我能够获得系数和截距,但我找不到找到教程中列出的模型的其他属性的方法,例如log-mighthood,Odds Ratio,Std.错误,z,P> | z |,[95%Conf.间隔].如果有人可以告诉我如何用sklearn包计算它们,我将不胜感激.
import pandas as pd
from sklearn.linear_model import LogisticRegression
url = 'http://www.ats.ucla.edu/stat/mult_pkg/faq/general/sample.csv'
df = pd.read_csv(url, na_values=[''])
y = df.hon.values
X = df.math.values
y = y.reshape(200,1)
X = X.reshape(200,1)
clf = LogisticRegression(C=1e5)
clf.fit(X,y)
clf.coef_
clf.intercept_
Run Code Online (Sandbox Code Playgroud) 新手与Kafka和AVRO一起玩。我正在尝试使用kafka-python,avro-python3软件包和遵循此答案来反序列化Python 3.7.3中的AVRO消息。
负责解码Kafka消息的功能是
def decode_message(msg_value, reader):
from io import BytesIO
from avro.io import BinaryDecoder
message_bytes = BytesIO(msg_value)
decoder = BinaryDecoder(message_bytes)
event_dict = reader.read(decoder)
return event_dict
Run Code Online (Sandbox Code Playgroud)
在哪里reader定义为avro.io.DatumReader实例:
def create_reader(filename_path):
from avro.io import DatumReader
import avro.schema
schema = avro.schema.Parse(open(filename_path).read())
reader = DatumReader(schema)
return reader
Run Code Online (Sandbox Code Playgroud)
不幸的是,它失败了。这是回溯:
<_io.BytesIO object at 0x7fab73fe5530>
<avro.io.BinaryDecoder object at 0x7fab74300090>
Traceback (most recent call last):
File "app.py", line 19, in <module>
kfk.read_messages(kafka_consumer, avro_reader)
File "/app/modules/consume_kafka.py", line 17, in read_messages …Run Code Online (Sandbox Code Playgroud) 从这个问题出发,我试图匹配两个 Pandas 数据帧。
匹配条件为:
(left['to_match'] == right['first']) | (left['to_match'] == right['second'])
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,左侧数据帧中要匹配的列应等于右侧数据帧中的第一列或第二列 - 因此是 OR 条件。
我可以使用和输入列表来解决问题,pd.merge例如
left.merge(right, left_on=['to_match', 'to_match'], right_on=['first', 'second'])
Run Code Online (Sandbox Code Playgroud)
但反过来,当两列匹配时,这只会给我 AND 条件结果。也就是说, 中的两列right具有相同的值。
这是输入数据的示例
左边
to_match
0 TCNU4843483
1 MA18219
2 MA81192
3 MFREIGHT
Run Code Online (Sandbox Code Playgroud)
正确的
first second
0 ASDREF TCNU4843483
1 MA18219 Null
2 Null Null
3 HROB789 NESU6748392
Run Code Online (Sandbox Code Playgroud)
和这个预期的输出
to_match first second
0 TCNU4843483 ASDREF TCNU4843483
1 MA18219 MA18219 Null
2 MA81192 Null Null
3 MFREIGHT Null Null
4 …Run Code Online (Sandbox Code Playgroud) 我在 sklearn 中使用逻辑回归模型,我有兴趣检索此类模型的对数似然,因此按照此处的建议执行普通似然比测试。
该模型使用对数损失作为评分规则。在文档中,对数损失被定义为“给定概率分类器预测的真实标签的负对数似然”。但是,该值始终为正,而对数似然应为负。举个例子:
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_prob = lr.predict_proba(X_test)
log_loss(y_test, y_prob) # 0.66738
Run Code Online (Sandbox Code Playgroud)
我在模型文档中没有看到任何方法,是否还有其他我目前不知道的可能性?
math machine-learning scikit-learn logistic-regression log-likelihood