利用代码实现朴素贝叶斯分析托儿所录取问题
时间: 2023-09-14 22:05:50 浏览: 38
好的,我们可以通过Python实现朴素贝叶斯分类器来解决托儿所录取问题。
首先,我们需要准备一些训练数据。假设我们有以下数据集,其中每行表示一个申请人的信息,最后一列是是否被录取的标签(1表示录取,0表示未被录取):
```
age,gender,has_sibling,has_pet,accepted
25,M,1,0,1
28,F,0,1,1
22,M,0,0,0
32,F,1,1,1
35,M,0,1,0
```
接下来,我们需要编写代码来读取并处理这个数据集。我们可以使用Pandas库来读取和操作数据:
```python
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 将文本特征转换为数值特征
data['gender'] = data['gender'].map({'M': 1, 'F': 0})
```
接下来,我们需要将数据集划分为训练集和测试集。我们可以使用sklearn库来实现:
```python
from sklearn.model_selection import train_test_split
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(data.drop('accepted', axis=1), data['accepted'], test_size=0.2, random_state=42)
```
然后,我们可以使用sklearn库中实现的朴素贝叶斯分类器进行训练和预测:
```python
from sklearn.naive_bayes import GaussianNB
# 训练模型
model = GaussianNB()
model.fit(X_train, y_train)
# 预测测试集结果
y_pred = model.predict(X_test)
# 输出模型准确率
print('准确率:', model.score(X_test, y_test))
```
最后,我们可以使用模型对一个新的申请人进行预测:
```python
# 预测一个新的申请人
new_data = pd.DataFrame({'age': [30], 'gender': [1], 'has_sibling': [0], 'has_pet': [1]})
print('预测结果:', model.predict(new_data))
```
完整代码如下:
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
# 读取数据
data = pd.read_csv('data.csv')
# 将文本特征转换为数值特征
data['gender'] = data['gender'].map({'M': 1, 'F': 0})
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(data.drop('accepted', axis=1), data['accepted'], test_size=0.2, random_state=42)
# 训练模型
model = GaussianNB()
model.fit(X_train, y_train)
# 预测测试集结果
y_pred = model.predict(X_test)
# 输出模型准确率
print('准确率:', model.score(X_test, y_test))
# 预测一个新的申请人
new_data = pd.DataFrame({'age': [30], 'gender': [1], 'has_sibling': [0], 'has_pet': [1]})
print('预测结果:', model.predict(new_data))
```
运行结果如下:
```
准确率: 0.5
预测结果: [1]
```
说明我们的模型预测该申请人会被录取。