用皮尔逊相关系数求的
皮尔逊相关系数是衡量两个变量之间线性相关程度的一种指标,其值在-1到1之间,其中1表示完全正相关,-1表示完全负相关,0表示无关。多元线性回归模型中,每个自变量与因变量之间的相关系数可以单独计算。
如果有帮助,请点击一下采纳该答案~谢谢
计算完所有表计之间相关系数之后,遇到一下几个问题:
1、同时存在相关关系的表计有很多,怎么进行分组,每组里面包含多少个对象怎么确定,有很多种可能,哪一种可能是最合理的。
2、从最大分组开始轮寻,采用逐个对象进行两两比对,计算量大,100多个表跑好几个小时,怎么解决性能问题。
3、通过排列组合方法寻找所有组合可能,100多个表直接分组会导致机器内存异常,需要先进行一定处理,勉强可以分组,耗性能。
逐一匹配代码:
def get_class(similarity_m,threshold):
"""
similarity_array:相似度矩阵,带有行名和列名
step1:获取输入数据的第0行数据
step2:若第0行满足指定阈值的个数只有1个,则重新设置阈值,否则进行下一步
step3:由step2的返回结果所形成的列名构成新的矩阵,判断该矩阵中是否所有数都满足阈值条件:
若不满足:从中取出子矩阵,并降低阈值,重复上述步骤
若满足:返回列名
"""
similarity_row = similarity_m.iloc[0,:]
names = np.array(list(similarity_row[similarity_row>=threshold].index))
assert names.shape[0]>1,print("域值过大,请重新输入")
# if names.shape[0]<=1:
# print("域值过大,请重新输入")
# return 0
similarity_m_new = similarity_m.loc[names,names]
names_logic = np.array(similarity_m_new>=threshold).all(axis=0)
if names_logic.sum()<=1 and similarity_m_new.shape[0]>2:
similarity_m_new = similarity_m_new.loc[names[1:],names[1:]]
threshold -= 0.01
return get_class(similarity_m_new,threshold)
else:
print(threshold)
result = names[names_logic]
return result
排列组合代码:
def combine2(n, k, similarity_m, threshold):
"""
实现一组数列的组合种类
n:长度为n的数列
k:抽取的个数
"""
def backtrace(tmp, index):
"""
tmp:存放组合
"""
if len(tmp) == k:
similarity_m_sub = similarity_m.iloc[tmp,tmp]
if np.array(similarity_m_sub>=threshold).all():
print(tmp)
res.append(tmp)
return
for i in range(index, n):
backtrace(tmp + [i], i + 1)
res = []
for i in range(n + 1 - k):
backtrace([i], i + 1)
return res