gpt4 book ai didi

python - 如何在 Python 中定义分类变量的级别?

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:01 28 4
gpt4 key购买 nike

我知道逻辑回归使用 0 和 1 作为因变量。但是,当变量定义为“健康”与“生病”类别时,如何分配 0 和 1?换句话说,引用水平是多少? “健康”被赋予 0 是因为 H 在字母表中排在第一位吗?

Testing CSV

import pandas as pd
import numpy as np
import os
from sklearn.model_selection import RepeatedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
# index_col=0 eliminates the dumb index column
baseball_train = pd.read_csv(r"baseball_train.csv",index_col=0,
dtype={'Opp': 'category', 'Result': 'category',
'Name': 'category'}, header=0)
baseball_test = pd.read_csv(r"baseball_test.csv",index_col=0,
dtype={'Opp': 'category', 'Result': 'category',
'Name': 'category'}, header=0)
# take all independent variables
X = baseball_train.iloc[:,:-1]
# drop opp and result because I don't want them
X = X.drop(['Opp','Result'],axis=1)
# dependent variable
y = baseball_train.iloc[:,-1]

# Create logistic regression
logit = LogisticRegression(fit_intercept=True)
model = logit.fit(X,y)

这里,Name 是类别为“Nolan”和“Tom”而不是 0 和 1 的因变量

最佳答案

如果您使用 Pandas 读取和编码数据,categories已排序(就像 sklearn,见下文)。

import pandas as pd
import io

txt = """
HR,HBP,Name
0,0,Tommy
0,1,Nolan
0,2,Tommy
1,1,Nolan"""

df = pd.read_csv(io.StringIO(txt), dtype={'Name': 'category'})
print(df)
  HR  HBP Name
0 0 0 Tommy
1 0 1 Nolan
2 0 2 Tommy
3 1 1 Nolan

如果您查看代码,您会发现虽然首先提到了 Tommy,但它的编码是 1 而 Nolan 得到的是 0。

print(df.Name.cat.codes)
0    1
1 0
2 1
3 0
dtype: int8

如果你想把所有的东西都当作字典:

encoded_categories = dict(enumerate(df.Name.cat.categories))
print(encoded_categories)

{0: 'Nolan', 1: 'Tommy'}


初步回答

您用 scikit-learn 标记了问题,所以我假设您使用的是 sklearn.preprocessing 中的 LabelEncoder。在这种情况下,值确实已排序。

简单的例子

from sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])

适合 调用 _encode如果是 Python listtuple(或除 numpy 数组以外的任何东西),它会在编码之前对其进行排序。 numpy 数组也可以使用 numpy.unique 进行排序。

可以通过

查看
print(le.classes_)
>> ['amsterdam' 'paris' 'tokyo']

所以在你的情况下

np.array_equal(le.fit(["healthy", "sick"]).classes_, 
le.fit(["sick", "healthy"]).classes_)
>> True

np.array_equal(le.fit(["healthy", "sick"]).classes_,
le.fit(["sick", "healthy", "unknown"]).classes_)
>> False

关于python - 如何在 Python 中定义分类变量的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56793296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com