前言
个人总结系列将不会再更新,这个个人博客上主要是记录学习内容了。因为我写东西总会想象以后有人看的时候,大家的观感是什么样的,所以我会写的比较做作。个人总结还好,只是加工过去发生过的东西并不会造成什么实际影响,但是今日计划这种,就容易沾上点怪味,制定的计划并不是完全合理的,而是带有一些夸张成分。遂将这部分移除。并不是说就不写了,我每天早上仍然会写总结和计划,只是放在幕后供我自己参考,也可以写进一些涉及个人隐私的事情。
过去十多天在博客上更新个人总结的经历确实让我进步很大,因为自我反思比以前都深刻和具体;也让我养成了这样一个好习惯,我相信这个习惯会一直助力我今后的学习生活。
学习经过
我这学期大数据挖掘课的课设内容是给定一个原始数据集,和一个既定目标,完成数据处理、挖掘、分析、产出成果等小目标。我的数据是五百多个条目,每个条目描述一个可穿戴设备,属性包含名称,价格,产地,佩戴部位,用途,这些是我认为和目标相关的属性,还有一些无关紧要的属性,总的有十多种。
数据挖掘的目标是根据除了价格以外的属性,给出一个可穿戴设备的属性,推测其价格。本质上是一个回归问题。之前在课上看到了决策树这个方法,就想先尝试一下。其实我懂的还很少,所以求助于ai,在期间学到了很多知识,想记录下来。这个回过头去记录的过程也是一种复习和重新获得感悟的过程。
数据处理部分
昨天以前对数据做过一些处理,但是没有做可视化,也没有处理干净。其实后续发现有一些问题,都陆续修复了。
学到的知识是一些和python相关的东西,从时间线上来讲,我应该先讲讲pycharm的破解部分,因为昨天早上我刚刚想打开工程,发现我的pycharm没证书了。
pycharm破解
其实很简单,只要有梯子,没有梯子就麻烦一点。
- 访问这个网址,下载jetbra.zip:Some keys for testing - jetbra.in
- 同时也是那个网站内,复制pycharm的激活码
- 按照下载的压缩包里的readme.txt文件的步骤一步步来就可以激活成功
按我的理解,这个破解的思路是通过不连接jetbrain账户云端,修改本地文件,让软件的证书系统认可这个可以说是作者自己编的证书密钥,从而达到破解的效果。如果没有用脚本修改本地文件,原版的pycharm是不会认这个网站提供的密钥的。我还破解过webstorm,原理也是同理。
中途遇到一个问题,输入完证书以后有一个弹窗:
出现这个问题后,pycharm能正常使用,但是退出一次以后再打开,证书失效又要激活一次证书,激活以后再次弹出弹窗。也就是说pycharm不是不认,而是它无法保存这个密钥。
解决方法是找到这个路径里的这个.key文件,直接删除就好,再次注册证书的时候就不会再弹出,永久激活成功。导致这个错误的原因我不是很确定了。
接下来讲讲我学到python知识,以及一些感悟。
学到的python知识
方差分析相关代码:
1
2
3
4
5
6
7
8from scipy.stats import f_oneway
# Group the target values based on the unique categories of the feature
def perform_anova(data, feature, target):
groups = [data[target][data[feature] == category] for category in data[feature].unique()]
# Perform ANOVA
anova_result = f_oneway(*groups)
# Return the p-value and F-statistic
return anova_result.pvalue, anova_result.statistic使用scipy库,这个库是python中用来进行科学计算的库,给人一种很专业的感觉(
具体语句特别是groups那一句,还不是很清楚,想继续问问这一句。但是这个函数是现成的,好用。关于在dataframe中复制数据的方法:
1
2
3
4
5
6
7# 复制数据并分别赋值到‘Lifestyle’和‘Fitness’
additional_data = data[data['category'] == 'Lifestyle, Fitness'].copy()
additional_data['category'] = 'Lifestyle'
data['category'].replace('Lifestyle, Fitness', 'Fitness', inplace=True)
# 将新的数据行添加到数据集中
data = pd.concat([data, additional_data], ignore_index=True)代码思路是,用.copy()方法复制一个单独的额外的dataframe,然后再用pd.cancat函数将两个dataframe合并。
其中还涉及到了属性替换,使用.replace()方法,第一个参数是被替换值,第二个参数是替换值,第三个参数不清楚,需要查一查。填充属性中的空值
1
2# 将空值填充为'Non-U.S.'
data['company_u_s_state'] = data['company_u_s_state'].fillna('Non-U.S.')使用.fillan()方法
检查一个列是否在这个dataframe中
1
2
3
4
5
6
7
8
9if 'column_name' in data.columns:
print("The attribute is in the dataset.")
else:
print("The attribute is not in the dataset.")
# or
if data.get('column_name') is not None:
print("The attribute is in the dataset.")
else:
print("The attribute is not in the dataset.")使用in运算符或者dataframe.get()方法,我倒是感觉in最直观最实用。
一个对dataframe的特殊操作如下:
1
data_updated['refined_company_country'] = data_updated.apply( lambda row: f"United States - {row['company_u_s_state']}" if row['company_country'] == 'United States' else row['company_country'], axis=1)
其中包含几个要点:
第一是我可以通过直接data[‘一个不存在的列’] = something,来直接创造一个新列;
第二是.apply()方法默认对dataframe的每一行每一列执行其中的操作,axis = 1表示行,默认为axis = 0表示列画图时,将坐标的名字斜过来,防止名字重叠。
1
2plt.xticks(rotation=45) # 可以调整角度为45度或其他值
plt.tight_layout() # 自动调整布局,以避免标签被截断好像没了
统计学、数据挖掘相关的知识
卡方检验和方差检验评估两个变量的相关性。
核心指标:计算出的P值和统计量(F统计量和卡方统计量)
P值数学原理:假设原假设为真的前提下,观测到的检验统计量等于或更极端的概率。p值越小,越能说明数据与原假设不符,即有显著的证据拒绝原假设。在这里原假设是:两个变量不相关。于是来算算P值:
由其数学原理我们就可以通过P值来衡量两者之间的相关性了。这里方差检验我更好理解,所以后续都使用方差检验衡量相关性(我知道可能不是最优方法,但是先让我能理解整个过程吧,我太菜了T_T)模型运行效果的衡量标准:R²
第一次让ai跑决策树的时候,ai跑出来说决策树效果并不好,判断标准是R²小于零。继续追问,给出以下解释:R²(决定系数)是用来衡量回归模型解释目标变量方差的比例的指标,取值范围通常在0到1之间。一个接近1的R²值表示模型能够很好地解释数据的变化,而接近0的R²值则表示模型对数据的拟合效果很差。
如何计算R²:
这下我了解了一个基本的模型好坏的判据了。
决策树表现差的原因:
1)数据量小,容易过拟合或者捕捉到噪声;特征有限(即维度太少)
2)基于划分的决策树对连续变量划分有限,可能出现粗糙划分,降低拟合精度
3)可能由于一个特征与目标值过强的关联性导致决策树太依赖这个特征,忽略其它特征的重要性
所以决策树可能并不适合这份数据。也有可能是参数问题,这需要我实际部署一次决策树或随机森林然后实际调参试一试。目前能使用的回归模型:
1)决策树
2)随机僧林
3)梯度提升回归(不是很了解)
4)线性回归
虽然但是,我好歹知道了几种完成回归任务的方法,比一无所知好太多。一整个下午的探索收获其实很多,有一种从0到1的发展了。