用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次相亲经验进行训练,结果仅供参考。
热门推荐
金银饰品标识符号全解析:从Au750到S925
Excel成绩雷达图制作教程:从数据输入到图表美化
电费几毛钱充电却要几块钱!小区电瓶车充电收费混乱,如何更惠民?
“凿”字的文化内涵:从读音到象征意义的多重解读
《星河战队4:星际觉醒》(下)AI科幻电影欣赏
桶装水生产环节臭氧水、二氧化氯、食品级过氧化氢消毒方式的比较
一生淡淡地看淡淡地写的井上靖
英语翻译技巧解析:从基础到高级的全面攻略
大科学装置助力防震减灾
体育新考,平时的体育课又该怎样上?
豆芽立大功?研究发现:经常吃豆芽的人,不出半年,或有这4变化
一文了解车载音频A2B通信
为什么很多985.211高校硕士毕业生,选择回炉技校学习
“妻管严”令家庭更和睦
四岁孩子起诉离婚:无民事行为能力人的婚姻法律权益保护
缓解痛经的有效方法:热敷、饮食、运动和心理调节全攻略
到艺博院 看达·芬奇的手稿 看《最后的晚餐》的“原貌”
秋季咳嗽高发,如何食疗养生防秋咳?
高分英美剧N刷指南:视觉震撼与语言学习双重盛宴
初学日语发音技巧分享
北极文学:对自然与人性的双重探讨
为什么接触生漆就过敏了?该如何预防?
冬季草莓的种植方法和技术
草莓的生长周期及开花结果时间(探究草莓生长周期,揭秘草莓开花结果时间)
张籍的《秋山》诗意盎然,写出了古往今来文人墨客追寻的心灵秋山
李若彤:从荧幕女神到爱情牺牲品的惊人故事
电气试验:电力系统安全运行的重要保障
金山岭长城:万里长城的精华地段
人到中年,最大的觉醒,是读懂了李白这四首诗
人最大的劣根性:笑人无,恨人有;嫌人穷,仇人富,你怎么看?