基于支持向量机模型的性别判断系统
基于支持向量机模型的性别判断系统
该系统使用支持向量机模型进行性别判断,用户可输入相关特征,获取预测结果。系统提供数据读取、标准化、模型构建和预测功能。
1. 数据读取和预处理
- 用户需先读取数据文件,数据文件应包含相关特征,例如长发、前额宽度、前额高度、鼻子宽度、鼻子长度、嘴唇薄厚、鼻子到嘴唇的距离等。
- 系统将对数据进行预处理,包括数据清洗、标准化等操作,以确保数据的完整性和一致性。
2. 模型构建
- 系统使用支持向量机模型(SVM)进行性别判断。
- 用户可以选择线性核函数或非线性核函数进行训练。
- 系统将根据训练数据自动调整模型参数,以达到最佳预测效果。
3. 模型预测
- 用户输入待预测的特征值,例如长发、前额宽度、前额高度、鼻子宽度、鼻子长度、嘴唇薄厚、鼻子到嘴唇的距离等。
- 系统将使用训练好的模型对输入特征进行预测,并将结果输出给用户。
4. 模型评估
- 系统将评估模型的预测精度、精确度、召回率和F1值,以评估模型的预测效果。
常见问题
Q:为什么用原数据集里的数据进行判断结果都是1?
A: 无法确定具体原因,可能是因为模型过拟合或者数据集不够全面、平衡导致的。建议尝试使用其他模型或者更全面、平衡的数据集进行训练和测试。
注意事项
- 数据质量对模型预测效果至关重要,确保数据完整、准确、一致。
- 尽量使用全面、平衡的数据集进行训练,以避免模型过拟合。
- 可根据实际情况选择不同的模型和参数进行训练。
代码示例
# 对用户输入值的合法性判断
if data is None:
messagebox.showerror('错误', '请先读取数据!')
return
# 创建支持向量机模型
clf = svm.SVC(kernel='linear', C=1)
# 训练模型
clf.fit(X_train, Y_train)
Y_pred = clf.predict(X_test)
accuracy = accuracy_score(Y_test, Y_pred)
precision = precision_score(Y_test, Y_pred, average='macro')
recall = recall_score(Y_test, Y_pred, average='macro')
f1 = f1_score(Y_test, Y_pred, average='macro')
messagebox.showinfo('提示', f'支持向量机模型构建成功!\n模型预测准确率:{accuracy:.4%}\n模型精确度:{precision:.4%}\n模型召回率:{recall:.4%}\n模型F1值:{f1:.4%}')
# 对数据进行预测
def predict_data():
global data, scaler, clf
def predict():
global data, scaler, clf
try:
# 读取数据
long_hair = long_hair_entry.get()
forehead_width_cm = forehead_width_cm_entry.get()
forehead_height_cm = forehead_height_cm_entry.get()
nose_wide = nose_wide_entry.get()
nose_long = nose_long_entry.get()
lips_thin = lips_thin_entry.get()
distance_nose_to_lip_long = distance_nose_to_lip_long_entry.get()
predict_data = [[long_hair,forehead_width_cm,forehead_height_cm,nose_wide,nose_long,lips_thin,distance_nose_to_lip_long]]
# 预测结果
predict_result = clf.predict(predict_data)
print(predict_result)
predict_dict = {1:'男性', 0:'女性'}
# 显示预测结果
predict_result_window = tk.Toplevel(root)
predict_result_window.title('模型判断结果')
tk.Label(predict_result_window, text='性别判断结果:').grid(row=0, column=0, padx=10, pady=10)
tk.Label(predict_result_window, text=predict_dict[predict_result[0]]).grid(row=0, column=1, padx=10, pady=10)
except:
messagebox.showerror('错误', '请确保输入值合法完整')
if data is None:
messagebox.showerror('错误', '请先读取数据!')
return
if scaler is None:
messagebox.showerror('错误', '请先标准化数据!')
return
if clf is None:
messagebox.showerror('错误', '请先构建决策树模型!')
return
window = tk.Tk()
window.title('模型判断')
# 创建文本输入框
long_hair_entry = tk.Entry(window)
forehead_width_cm_entry = tk.Entry(window)
forehead_height_cm_entry = tk.Entry(window)
nose_wide_entry = tk.Entry(window)
nose_long_entry = tk.Entry(window)
lips_thin_entry = tk.Entry(window)
distance_nose_to_lip_long_entry = tk.Entry(window)
# 创建标签
long_hair_label = tk.Label(window, text='是否长发(0/1):')
forehead_width_cm_label = tk.Label(window, text='前额宽度:')
forehead_height_cm_label = tk.Label(window, text='前额高度:')
nose_wide_label = tk.Label(window, text='是否鼻宽(0/1):')
nose_long_label = tk.Label(window, text='是否鼻长(0/1):')
lips_thin_label = tk.Label(window, text='是否嘴唇薄(0/1):')
distance_nose_to_lip_long_label = tk.Label(window, text='鼻子到嘴唇的距离是否长(0/1):')
# 将标签和文本输入框添加到窗口中
long_hair_label.grid(row=0, column=0)
long_hair_entry.grid(row=0, column=1)
forehead_width_cm_label.grid(row=1, column=0)
forehead_width_cm_entry.grid(row=1, column=1)
forehead_height_cm_label.grid(row=2, column=0)
forehead_height_cm_entry.grid(row=2, column=1)
nose_wide_label.grid(row=3, column=0)
nose_wide_entry.grid(row=3, column=1)
nose_long_label.grid(row=4, column=0)
nose_long_entry.grid(row=4, column=1)
lips_thin_label.grid(row=5, column=0)
lips_thin_entry.grid(row=5, column=1)
distance_nose_to_lip_long_label.grid(row=6, column=0)
distance_nose_to_lip_long_entry.grid(row=6, column=1)
predict_button = tk.Button(window, text='开始判断', command=predict)
predict_button.grid(row=7, column=0, columnspan=2)
原文地址: https://www.cveoy.top/t/topic/fZ4b 著作权归作者所有。请勿转载和采集!