如何从 CSV 在 Scikit 中执行朴素贝叶斯分类
Posted
技术标签:
【中文标题】如何从 CSV 在 Scikit 中执行朴素贝叶斯分类【英文标题】:How to Perform a Naieve Bayes Classification in Scikit from CSV 【发布时间】:2018-05-22 01:36:17 【问题描述】:我希望根据存储在 csv 中的几列人口统计数据以及他们的吸烟者状态来预测某人是否吸烟。
使用的列是: 性别、年龄、种族、服役经历、出生国家、教育程度婚姻状况、家庭收入、家庭收入、家庭子女、酒精数量、单位时间、呼吸急促、哮喘、锻炼、吸烟者、吸烟前、吸烟年龄。
所有列都有数字值,但不一定是二进制值。有人可以帮我纠正我的代码,以便在确定吸烟者状态时考虑这些因素,然后帮我衡量分类器的准确性吗?
我有来自类似问题的以下代码:how to Load CSV Data in scikit and using it for Naive Bayes Classification
target_names = np.array(['Positives','Negatives'])
# add columns to your data frame
data['is_train'] = np.random.uniform(0, 1, len(df)) <= 0.75
data['Type'] = pd.Factor(targets, target_names)
data['Targets'] = targets
# define training and test sets
train = data[data['is_train']==True]
test = data[data['is_train']==False]
trainTargets = np.array(train['Targets']).astype(int)
testTargets = np.array(test['Targets']).astype(int)
# columns you want to model
features = data.columns[0:7]
# call Gaussian Naive Bayesian class with default parameters
gnb = GaussianNB()
# train model
y_gnb = gnb.fit(train[features], trainTargets).predict(train[features])
#Predict Output
【问题讨论】:
只需使用gnb.predict(test[features])
即可获取预测标签。然后将它们与您的testTargets
进行比较
【参考方案1】:
这里的数据框似乎缺少一行,但我假设你有它。如果您不这样做,请使用pandas.read_csv 读取您的数据。
此外,您的列似乎包含分类数据和数字数据。例如,“SmokedBefore”列可能是 1/0,而“Age”列可能是 20 或 30 等数字。
这会有所不同,因为在“SmokedBefore”中的意图并不是说 1>0。目的是说是/否。如果您的模型假设更高(或更低)更好,那么这将导致问题。因此它是分类的,不应被视为数值。它只是一个标签,表明某人以前是否吸烟。
但是,在“Age”中,是的意图是说 30 与 20 乘以 10 不同。因此,它是 numerical 并且应该这样对待。
要解决这个问题,您需要将分类特征转换为另一组二元特征,以平衡这种影响并为您处理。这称为单热编码。而不是“SmokedBefore”上的 1/0,它将变为“is_1”和“is_0”以及相应的数据。像这样,每一列都有一个 1 和一个 0。
您可以简单地使用 sklearn 中提供的onehotencoder 函数。使用 categorical_features 参数指定哪些列具有分类特征
【讨论】:
以上是关于如何从 CSV 在 Scikit 中执行朴素贝叶斯分类的主要内容,如果未能解决你的问题,请参考以下文章