from numpy import * import random import numpy as np from sklearn.cluster import KMeans import re import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.colors import csv import pandas as pd from sklearn.metrics import silhouette_score from scipy.spatial.distance import cdist import imp import imp #计算两个点之间的欧氏距离 def calcuDistance(vec1, vec2): return np.sqrt(np.sum(np.square(vec1 - vec2))) #根据距离质心的大小定义用户目前所处的等级 def UserRank(AC_num, ua_centroids): min = 100000 userRank = mini = -1 rows = shape(ua_centroids)[0] for i in range(rows): if calcuDistance(AC_num, ua_centroids[i][0]) < min: min = calcuDistance(AC_num, ua_centroids[i][0]) mini = i return mini+1 #统计每个用户等级的人数 def UserRank_cnt(): cntuserrank1 = 0 cntuserrank2 = 0 cntuserrank3 = 0 cntuserrank4 = 0 cntuserrank5 = 0 rows = shape(UAKMat)[0] for i in range(rows): x = UserRank(UAKarray[i][0], ua_centroids) if x == 1: cntuserrank1 += 1 elif x == 2: cntuserrank2 += 1 elif x == 3: cntuserrank3 += 1 elif x == 4: cntuserrank4 += 1 else: cntuserrank5 += 1 return cntuserrank1,cntuserrank2,cntuserrank3,cntuserrank4,cntuserrank5 #根据AC题量的多少给不同题目自定义难度等级 def ProbRank_Cnt(AKMat, pa_centroids): cntprobrank1 = 0 cntprobrank2 = 0 cntprobrank3 = 0 cntprobrank4 = 0 cntprobrank5 = 0 rows1 = shape(AKMat)[0] rows2 = shape(pa_centroids)[0] ARKMat = AKMat ARKMat = np.insert(ARKMat, 1, values=0, axis=1) for i in range(rows1): # i=0 min = 1000000 for j in range(rows2): if calcuDistance(AKMat[i], pa_centroids[j]) < min: min = calcuDistance(AKMat[i], pa_centroids[j]) minJ = j ARKMat[i, 1] = 5-minJ if minJ == 0: cntprobrank5 += 1 elif minJ == 1: cntprobrank4 += 1 elif minJ == 2: cntprobrank3 += 1 elif minJ == 3: cntprobrank2 += 1 elif minJ == 4: cntprobrank1 += 1 return ARKMat,cntprobrank1,cntprobrank2,cntprobrank3,cntprobrank4,cntprobrank5 #根据不同难度等级所带的标记不同,统计出不同难度等级的题量有多少 def showRecommend(APARKMat): ProbRank_Cnt(AKMat, pa_centroids) centroids0 = [] centroids1 = [] centroids2 = [] centroids3 = [] centroids4 = [] row = shape(APARKMat)[0] for i in range(row): if APARKMat[i, 2] == 1: centroids0.append(APARKMat[i, 0]) elif APARKMat[i, 2] == 2: centroids1.append(APARKMat[i, 0]) elif APARKMat[i, 2] == 3: centroids2.append(APARKMat[i, 0])
本科毕设题目推荐系统
最新推荐文章于 2024-07-29 11:32:41 发布
该博客介绍了一个本科毕设项目,利用KMeans聚类算法对AC题量进行分析,以确定不同题目的难度等级。同时,根据用户的AC数量确定用户等级,并提供相同及更高难度等级的题目推荐。代码中涉及到numpy、matplotlib和sklearn等库,用于数据处理和可视化。
摘要由CSDN通过智能技术生成