import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, confusion_matrix
import openpyxl
import joblib
# 1. 准备训练数据集
data = pd.read_csv('address_data.csv', encoding='GBK')
# 2. 特征工程
vectorizer = CountVectorizer(max_features=7000)
X = vectorizer.fit_transform(data['Address']).toarray()
y = data['IsFake']
# 检查是否已存在模型文件
try:
classifier = joblib.load('model.joblib')
model_trained = True
except FileNotFoundError:
classifier = None
model_trained = False
while True:
user_input = input("请输入 '开始训练' 或 '开始预测' 或 'exit' 退出: ")
if user_input.lower() == 'exit':
if classifier:
# 退出前保存模型
joblib.dump(classifier, 'model.joblib')
print("退出程序。")
break
elif user_input.lower() == '开始训练':
if not classifier:
# 可在这里增加其他模型算法
classifier = MultinomialNB()
# 开始训练模型
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
confusion = confusion_matrix(y_test, y_pred)
print("模型已经训练完成。")
print("准确性: ", accuracy)
print("混淆矩阵:\n", confusion)
model_trained = True
elif user_input.lower() == '开始预测':
if not model_trained:
print("请先训练模型,然后再进行预测。")
else:
# 加载已训练的模型
if not classifier:
classifier = joblib.load('model.joblib')
# 加载新数据集进行预测
new_data = pd.read_csv('new_address_data.csv', encoding='GBK')
X_new = vectorizer.transform(new_data['Address']).toarray()
predictions = classifier.predict(X_new)
# 将预测结果存储在一个新的数据框中
new_data['Predicted_IsFake'] = predictions
# 导出预测结果到一个 Excel 文件
new_data.to_excel('address_predictions.xlsx', index=False, engine='openpyxl') # 指定所需的 Excel 文件名
print("预测结果已保存到 'address_predictions.xlsx' 文件中")
else:
print("无效的输入,请输入 '开始训练' 或 '开始预测' 或 'exit'。")
当我们面对一个乱写的地址时,该怎么利用机器去学习,让机器通过模型去帮助我们判断呢?
本篇基于朴素索叶斯模型去开发代码