??在网上约会的时代,有比鱼更多的浪漫选择,好吧,你知道的。例如,在命名恰当的网站Plenty of Fish上,你可以仔细查看数百或数千名潜在伴侣的档案,然后再决定联系哪一个。这种不受约束的选择意味着更容易找到真爱——或者说很多约会者都相信这一点。假设你的选择越多,你就越有可能找到真正适合你的人。然而,许多约会者发现,不那么浪漫的选择会带来一流的结果,而不会带来所有的焦虑。EHarmony是美国最大的交友网站之一,它让客户填写一份详细的兼容性调查,然后向他们发送数量有限的匹配信息,通常一次发送几到十几条左右。婚姻的成功率相对较高。研究发现,速配者通常根据外表来选择伴侣。当有更少的选择时,约会者可能会花时间反思一个人更深层次的品质。
??斯沃斯莫尔学院多温·卡特赖特社会理论和社会行动教授巴里·施瓦茨多年来一直认为,不断限制我们的选择会带来更好的结果。他认为过多的选择压倒了我们,让我们不快乐——他称之为选择悖论。施瓦茨说,无尽的选择与其说是令人满意,不如说是令人乏味。在一项被称为“果酱研究”的经典实验中,杂货店购物者扫描24种不同的美食果酱的可能性比只看6种果酱的购物者低。从更广泛的选择中选择的购物者也对他们购买的果酱感到不满意。施瓦茨解释说,问题是,当你有更多的选择时,你往往会给自己施加更大的压力,让自己做出完美的选择——毕竟,当选择并不完美时,你会感到更失望。施瓦茨说:“即使你选择得很好,你最终也会被否定。”。“你确信,即使你做得很好,你也应该做得更好。”根据心理学家Daniel Kahneman和Amos Tversky的研究,Schwartz认为,当你面临无数选择时,做出错误选择的预期损失抵消了你对更多选择前景的喜悦。
??如果你坚持从一大堆人中挑选一个人,你不仅会不那么满意,而且可能会做出更糟糕的选择。在台湾大学的一项研究中,当在线约会者有更多的搜索选项时,他们花在考虑每种可能性上的时间更少,而且发现更难区分好的前景和坏的前景。研究人员解释说,过于稀疏地拉伸你的认知能力,往往会在无关的细节上束缚你,并分散你对你认为最重要的标准的注意力。这表明,为了评估重要的品质——对大多数人来说,这些品质包括伴侣的诚实、可靠性和幽默感——你需要更深入地寻找,而不是更广泛地寻找。
??这是否意味着你应该选择由eHarmony等供应商提供的专家指导的定制飞行方式?相当多的约会者非常欣赏精心策划的选择,愿意为此支付额外费用。假设你是一个在线约会网站的伴侣。您应该完成以下任务:
??1.创建一个客观的定量算法或一组算法,通过几个选项完成在线约会匹配。
??2.使用您的算法来制定您的“前20名推荐约会者”列表。在约会时,对一个理想大小的选择集做出更合适的估计——一个足够大的选择集,包括多样性和深度,但又足够小,你可以公平地衡量每个潜在客户的潜力,而不会绊倒你大脑的过载开关。
??3.给出用户需要为您的网站填写的信息表格的设计。研究网上约会的形式设计与成功率之间的关系。
??4.写一页非技术性的新闻稿,描述你的新算法、结果和网站。
??随着社会经济的快速发展,“剩男剩女”现象越来越普遍。出现了各种各样的社交网站,比如《鱼儿丰收》。这是对大量鱼类的研究。
??对于问题一,对各类用户自身属性的数据进行标准化,然后采用改进的KNN算法对选项进行统计分析,得到相对距离。使用属性值相关距离公式计算距离的最小值。距离的最小项是满足条件的匹配选项。利用满意度矩阵比较两个匹配方的满意度,得到匹配的候选对象。
??对于问题二,利用层次分析法建立层次结构,构造一对比较矩阵。然后,进行分层单排序、总体分层排序和一致性检查。然后采用基于用户相似度的协同过滤推荐算法。对用户属性相似度和交互相似度进行拟合。确定不同权重,分值越高,推荐前20名最佳日期。
??对于问题三,建立了成功率的数学模型,利用欧氏距离定义了用户自身条件与配偶要求之间的相似度。然后将每个用户视为一个点,转化为最小权二分法问题。男女约会者配对,根据欧氏距离计算男女约会者之间的相似度。
??对于问题4,根据问题1、2和3中使用的KNN算法、AHP和推荐算法,我们编写了一份非技术性新闻稿。
??改进的KNN算法,考虑了属性值对类别判断的重要性以及不同属性值之间的相关性,提高了分类的准确性。分别采用层次分析法和协同推荐算法,减少了主观判断带来的误差,提高了结果的准确性。
??假设获得的数据真实可靠;
??假设双方根据自己的情况决定配偶的要求。;
??用“年龄”、“身高”、“婚姻状况”、“受教育程度”、“单位类型”、“收入”、“住房状况”、“面积”、“外貌”表示男女的优秀程度;
假设所有用户都是异性恋者。
??问题1分析
??对于问题一,完成网上交友匹配多个选项,首先设置合适的选项,如年龄、身高、收入、婚姻状况、住房状况等,利用改进的KNN算法对用户选择的选项进行分析,得到相同选项之间的相对距离。距离的最小值是匹配选项。然后利用满意度矩阵比较匹配各方的满意度,得到匹配的候选对象。
??问题二分析
??为了找出满足某一用户需求的前20名最佳约会者,利用层次分析法(AHP)建立层次结构,构造成对比较矩阵,检验层次单序及其一致性,并进行总层次排序及其一致性检验。然后从100名女性用户中随机抽取1名,采用层次分析法(AHP)对前20名最佳数据进行求解。然后,利用基于用户相似度的协同过滤推荐算法,介绍了用户相似度和用户交互相似度的概念和用途。最后,从100名女性用户中随机抽取一名用户。使用推荐算法推荐排名前20%的优秀男性用户。
??问题三分析
??首先,分析用户应填写哪些基本信息,使网络背景能够最大限度地了解用户,并能够达到其前20名的合适日期候选人。因此,主要问题是选择合适的信息选项,使信息的填充和配对成功率达到最大。将一些数据进行量化,将一些变量之间的值差别很大的相应变量进行标准化处理,结合男女用户的情况,利用欧氏距离确定两者之间的相互满意度。对应度越大,匹配越大,成功率越高。越是成功的日期,越是成功的时候,两者之间的差异不大。因此,我们可以将满意度定义为男性约会者对女性条件的要求程度,女性约会者与男性自我之间的相似程度,如果两者之间的相似性越大,满意度越高。那么成功的几率就越高。
??问题四分析
??根据前三个问题中使用的KNN算法和满意度矩阵,利用分析结果和算法的实用性和通用性编写新闻稿。
Annex Ⅰ KNN algorithm based on attribute value transformation
clear;
clc;
K=3;
trainData = [1.0,2.0;1.2,0.1;0.1,1.4;0.3,3.5];
trainClass = [1,1,2,2];
testData = [0.5,2.3];
[N,M]=size(trainData);
dist=zeros(N,1);
for i=1N
dist(i,)=norm(trainData(i,)-testData);
end
[Y,I]=sort(dist,1);
trainClass=trainClass(I);
classNum=length(unique(trainClass));
labels=zeros(1,classNum);
for i=1K
j=trainClass(i);
labels(j)=labels(j)+1;
end
[~,idx]=max(labels);
fprintf('0 %dn',idx);
Test
KNN.m
function [ idx ] = KNN( trainData,trainClass,testData,K )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
[N,M]=size(trainData);
dist=zeros(N,1);
for i=1N
dist(i,)=norm(trainData(i,)-testData);
end
[Y,I]=sort(dist,1);
K=min(K,length(Y));
labels=trainClass(I);
%{
classNum=length(unique(trainClass));
labels=zeros(1,classNum);
for i=1K
j=trainClass(i);
labels(j)=labels(j)+1;
end
[~,idx]=max(labels);
%}
idx=mode(labels(1K));
fprintf('该测试数据属于类 %d ',idx);
end
KnnDataTest.m
clear;
clc;
X=load('datingTestSet2.txt');
ratio=0.1;
[N,M]=size(X);
K=4;
trainData=X(,13);
trainClass=X(,4);
num_test=Nratio;
newData=(oldData-minValue)(maxValue-minValue);
minValue=min(trainData);
maxValue=max(trainData);
trainData=(trainData-repmat(minValue,N,1)).(repmat(maxValue-minValue,N,1));
error=0;
for i=1num_test
idx=KNN(trainData(num_test+1N,),trainClass(num_test+1N,),trainData(i,),K);
fprintf('该测试数据的真实类为:%dn',trainClass(i,));
if idx~=trainClass(i,);
error=error+1;
end
end
Annex II: program for finding the maximum eigenvalue of the discriminant matrix:
A =
1.0000 0.3333 1.0000 1.0000 0.2000 1.0000 0.3333 4.0000
0.3333 1.0000 2.0000 1.0000 0.2000 2.0000 1.0000 1.0000
1.0000 2.0000 1.0000 0.3333 1.0000 0.1429 1.0000 2.0000
1.0000 1.0000 0.3333 1.0000 0.3333 1.0000 0.2000 1.0000
0.2000 0.2000 1.0000 0.3333 1.0000 1.0000 1.0000 0.2000
1.0000 2.0000 0.1429 1.0000 1.0000 1.0000 1.0000 1.0000
0.3333 1.0000 1.0000 0.2000 1.0000 1.0000 1.0000 0.3333
4.0000 1.0000 2.0000 1.0000 0.2000 1.0000 0.3333 1.0000
>> [x,y]=eig(A);
eigenvalue=diag(y);
lamda=max(eigenvalue)
lamda =
8.1841
y_lamda = x(:, 1)
>> y_lamda =
0.6532
0.0344
0.1961
0.0045
0.0380
0.0155
0.0438
0.7281