用AI预测相亲成功率:机器学习实战教程
创作时间:
作者:
@小白创作中心
用AI预测相亲成功率:机器学习实战教程
引用
CSDN
1.
https://blog.csdn.net/li060708/article/details/145914597
在当今社会,相亲已成为许多人寻找伴侣的重要途径。那么,有没有可能通过人工智能来预测相亲的成功率呢?本文将通过一个实际案例,使用Python机器学习算法(随机森林)来预测相亲成功率。
相亲成功率数据分析
根据相关数据显示,2025年我国单身男女总人数已突破2.4亿。在所有单身男女中,通过相亲结识并步入婚姻的人群比例约占30%,而通过自由恋爱进入婚姻的比例则达到50%,剩余的20%则选择保持单身或暂时不考虑婚姻。
另外有数据显示:2025年已有超过40%的相亲用户使用了类似DeepSeek的人工智能工具,其中,使用这些工具成功脱单的比例高达65%,显著高于传统相亲方式的成功率(约为35%)。
接下来,我们将通过一个实际例子,展示如何使用人工智能机器学习算法来预测相亲成功率。
一、数据采集
首先,我们需要准备一份相亲成功率的数据。数据集包含以下特征:
house:是否有房(0/1)car:是否有车(0/1)appearance:长相(1-10)family_status:家庭情况(1-10)parents_status:父母情况(1-10)lifestyle:生活习惯(1-10)education:教育程度(1-6)personality:性格(1-10)interests:兴趣(1-10)
最终得到的结果是成功为1,失败为0。
二、建立模型
接下来,我们将使用随机森林算法来训练模型。以下是具体的代码实现:
1. 加载数据
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 数据预处理
data.fillna(data.mean(), inplace=True)
2. 划分训练集和测试集
from sklearn.model_selection import train_test_split
# 划分训练数据和测试数据
x = data.drop('success', axis=1)
y = data['success']
# 开始划分
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
3. 训练模型
from sklearn.ensemble import RandomForestClassifier
# 使用随机森林训练
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(x_train, y_train)
4. 测试模型
from sklearn.metrics import accuracy_score, classification_report
# 使用测试数据进行预测
y_pred = rf.predict(x_test)
# 将预测的数据进行对比,得到准确率
y_res = accuracy_score(y_test, y_pred)
print('准确率为:', y_res)
y_rep = classification_report(y_test, y_pred)
print('详细报告\n', y_rep)
5. 预测结果
# 使用自身实际数据进行预测
my_data = pd.DataFrame({
'house': [0], # 是否有房0无,1有
'car': [0], # 是否有车0无,1有
'appearance': [8], # 颜值,1-10分
'family_status': [2], # 家庭情况1-10分
'parents_status': [2], # 父母情况1-10分
'lifestyle': [2], # 生活习惯1-10分
'education': [4], # 教育情况1-6 ,1 小学 6 博士
'personality': [6], # 性格 1-10
'interests': [2] # 兴趣 1-10
})
print('=====================预测结果=========================')
# 预测结果
result = rf.predict(my_data)
if result[0] == 1:
print('恭喜,牵手成功')
else:
print('下次再遇见更好的')
三、制作相亲预测界面
为了方便不熟悉写代码的朋友进行预测,我们可以使用Qt5制作一个相亲预测的界面。以下是具体的代码实现:
import sys
from PySide6.QtCore import QSize
from PySide6.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton, QGridLayout, QMessageBox)
from PySide6.QtGui import QMovie
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
class PredictionUI(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建网格布局
grid = QGridLayout()
self.setLayout(grid)
# 创建标签和输入框
self.inputs = {}
features = [
('house', '是否有房(0/1)'),
('car', '是否有车(0/1)'),
('appearance', '长相(1-10)'),
('family_status', '家庭情况(1-10)'),
('parents_status', '父母情况(1-10)'),
('lifestyle', '生活习惯(1-10)'),
('education', '教育程度(1-6)'),
('personality', '性格(1-10)'),
('interests', '兴趣(1-10)')
]
# 添加标签和输入框到网格布局
for i, (key, label_text) in enumerate(features):
label = QLabel(label_text)
input_field = QLineEdit()
self.inputs[key] = input_field
grid.addWidget(label, i, 0)
grid.addWidget(input_field, i, 1)
# 添加预测按钮
predict_btn = QPushButton('进行预测', self)
predict_btn.clicked.connect(self.predict)
grid.addWidget(predict_btn, len(features), 0, 1, 2)
# 添加结果标签
self.result_label = QLabel('')
grid.addWidget(self.result_label, len(features) + 1, 0, 1, 2)
# 设置窗口
self.setGeometry(300, 300, 400, 700)
self.setWindowTitle('婚恋匹配预测系统')
self.show()
def predict(self):
try:
# 创建特征名称的中文对照表
feature_names = {
'house': '是否有房',
'car': '是否有车',
'appearance': '长相',
'family_status': '家庭情况',
'parents_status': '父母情况',
'lifestyle': '生活习惯',
'education': '教育程度',
'personality': '性格',
'interests': '兴趣'
}
for feature, input_field in self.inputs.items():
value = input_field.text().strip()
if not value:
QMessageBox.warning(self, '警告', f'{feature_names[feature]} 不能为空!')
return
try:
float(value)
except ValueError:
QMessageBox.warning(self, '警告', f'{feature_names[feature]} 必须是数字!')
return
QMessageBox.information(self, '提示', '开始预测')
# 获取输入值
input_data = {}
for key, input_field in self.inputs.items():
value = float(input_field.text())
input_data[key] = [value] # 创建单值列表
# 创建DataFrame
df = pd.DataFrame(input_data)
# 调用训练好的模型
pre = xiangqinPredict(df)
if pre:
prediction = "匹配成功"
movie = QMovie("./img/heart.gif") # 确保gif文件在正确的路径下
else:
prediction = "匹配失败"
movie = QMovie("./img/fail.gif") # 确保gif文件在正确的路径下
print(prediction)
# 设置gif大小(可选)
movie.setScaledSize(QSize(400, 400)) # 设置gif显示大小为100x100像素
# 在标签中显示gif
self.result_label.setMovie(movie)
movie.start() # 开始播放gif
except ValueError:
QMessageBox.warning(self, '错误', '请确保所有输入都是有效的数字!')
except Exception as e:
QMessageBox.warning(self, '错误', f'发生错误: {str(e)}')
# 根据数据进行预测
def xiangqinPredict(data):
# 使用pd读取data.csv文件
df = pd.read_csv('data.csv')
# 填充缺失值,使用各列平均值填充空值
df.fillna(df.mean(), inplace=True)
# 删除数据集中的'success'列
x = df.drop('success', axis=1)
y = df['success']
# 将数据集分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
print(x_train)
# 创建一个随机森林分类器rf
rf = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练
rf.fit(x_train, y_train)
# 使用训练好的模型对测试集(X_test)进行预测
x_pre = rf.predict(x_test)
print(x_pre)
accuracy_ = accuracy_score(y_test, x_pre)
print('准确度', accuracy_)
simple_pred = rf.predict(data)
if simple_pred[0] == 1:
return True
else:
return False
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = PredictionUI()
sys.exit(app.exec())
四、总结
通过预测模型,我们发现了一些反常识的结论:
- 有房有车仅排第5位(12.1%)
- 兴趣匹配度重要性不足8%
- 个人性格占60%的比重,说明个人魅力太重要
数据采集方面,大模型可以采集很多人的数据,数据越真实,得到的结果越准确。以上是根据某人的30次相亲经验进行训练,结果仅供参考。
热门推荐
人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?
为什么上了高速以后更费油?这才是真正的原因
手动变速箱的优缺点是什么?这种变速箱对驾驶体验有何影响?
长水痘的症状有哪些?了解水痘的常见症状和表现
远征台湾,历史上第一次有文献记载的台湾接触
高血压分类新增“单纯舒张期高血压”,这些知识你需要了解
89岁的屠呦呦,再次震惊世界!她的事迹值得学习
App已下架?五种实用方法帮你重新安装
荒诞鲨鱼入巴黎——《巴黎深渊》
天然温泉水处理技巧,达到健康泡浴要求
儿童焦虑症早期的症状及应对方法
畅游开封:三天深度游览攻略揭秘
家庭影院新体验!NAS、电视与回音壁如何完美融合?
《狼人杀》历史与文化影响分析
中国火车车次字母含义全解析:从高铁到普客的详细分类
汉川经开区:1/4来自这里!从湖北走向全国
自制咸鸭蛋,好吃还安全
肿瘤抑制率达91%!中山大学合作发文:结肠癌抗肿瘤治疗新策略
蜂蜜:天然滋养,守护健康!
世界首创!西香高速泸沽湖特大桥取得关键突破
雄安新区房产禁令下的投资新机遇:白沟凭什么成热点?
从病因到临床实践:对非透析慢性肾脏病患者肾性贫血的优化管理
清明踏青习俗的演变:唐代开始成为清明节习俗
装配式建筑的魅力:让建筑像汽车一样制造
什么是十二章纹图案
房子有贷款怎么办理继承?一文详解继承流程与费用
每天学一个成语——(缘木求鱼)当方向错了,努力还有意义吗?古人已给出答案
“超级工程”刷新进度!未来成都至泸沽湖仅需7小时
《送东阳马生序》,为何备受推崇?因它暗含普通人跨越阶层的奥秘
家常萝卜菜肴推荐,轻松做出好味道