#AI相亲分析#
2025年,我国单身男女总人数已突破2.4亿,在所有单身男女中,通过相亲结识并步入婚姻的人群比例约占30%,而通过自由恋爱进入婚姻的比例则达到50%,剩余的20%则选择保持单身或暂时不考虑婚姻。
另外有数据显示:2025年已有超过40%的相亲用户使用了类似DeepSeek的人工智能工具,其中,使用这些工具成功脱单的比例高达65%,显著高于传统相亲方式的成功率(约为35%)。
接下来,我将使用实际例子,通过人工智能机器学习算法,模拟AI是如何预测相亲成功率的。
一:采集数据
首先,我们需要准备一份相亲成功率的数据,类似deepseek这样的大模型也是根据网上的数据进行总结之后,才能得出预测结果。
下面我将30年来我的相亲记录给大家奉献出来。数据如下:
这张图片的主要要素有:
('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.
举个例子,我相亲的第一次数据,大家看第一行。
房子:有
车子:无
长相:7分
家庭条件:6分
父母健康状态:8分
生活习惯:5分
教育程度:大学
性格:7分
兴趣爱好:6分
是否成功:成功
OK,数据准备完毕,这份数据比较完整,可以直接进行训练。
二,建立模型
接下来就需要选择模型和算法了。我问deepseek,他说根据这份数据的特点,使用随机森林比较合适。
开始写代码:
首先是加载数据:
# 读取数据 data = pd.read_csv('data.csv') # print(data) # 数据预处理 data.fillna(data.mean(),inplace=True)
第二步:划分训练集
# 划分训练数据和测试数据 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)
第三步:选择合适的模型进行训练
# 使用随机森林训练 rf = RandomForestClassifier(n_estimators=100,random_state=42) rf.fit(x_train,y_train)
第四步:测试结果集
# 使用测试数据进行预测 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)
第五步:使用自身的结果进行预测:
# 使用自身实际数据进行预测 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('下次再遇见更好的')
经过训练和测试,模型基本正确
通过对以上数据的分析,我发现性格的权重非常大,只要性格为8分,车和房子都可以不需要也可以相亲成功,你觉得是不是这样呢?
三,制作相亲预测界面
接下来,考虑使用qt5制作一个相亲预测的界面,方便不熟悉写代码的朋友进行预测。
最终代码如下:
import sys from PySide6.QtCore import QSize from PySide6.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton, QGridLayout, QMessageBox) import pandas as pd from PySide6.QtGui import QMovie from sklearn.ensemble import RandomForestClassifier # 假设你使用的是随机森林模型 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) # 显示结果 # self.result_label.setText(f'预测结果: {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次相亲经验进行训练,结果仅供参考。
以上,分享给需要的朋友!感谢支持!期待你的点赞关注。
领取专属 10元无门槛券
私享最新 技术干货