首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《实战!用AI预测你找老婆的成功率》 Python机器学习

#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次相亲经验进行训练,结果仅供参考。

以上,分享给需要的朋友!感谢支持!期待你的点赞关注。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OaPNTL6bbKo_FcCqx7akvJBg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券