数据挖掘学习之路

数据挖掘学习之路
前⾔
记录⼀下学习数据挖掘的历程
⼀、数据挖掘
从数据集合中提取⼈们感兴趣的知识,这些知识是隐含的、事先未知的、潜在的有⽤信息。提取出来的知识⼀般为概念、规则、规律、模式等形式。在⼤数据的背景之下,数据分析不需要具备概率分布的先验知识,限制条件更少,更为灵活⾼效。⼤数据已被应⽤于各个领域,包括宏观经济、⾦融、电⼒系统、医疗服务、电⼦商务以及社交⽹络等。
⼆、⼤数据分析与挖掘主要技术
主要分为如下⼏个步骤:
任务⽬标的确定
⽬标数据集的提取
数据预处理(数据清洗、数据转换、数据集成、数据约减等操作)
建⽴适当的数据分析与挖掘模型(如统计分析、分类和回归、聚类分析、关联规则挖掘、异常检测等)
模型的解释与评估
知识的应⽤
数据挖掘主要包括如下的功能:
对数据的统计分析与特征描述(统计分析包括对数据分布、集中与发散程度的描述、主成分分析,数据之间的相关性分析等。特征描述的结果可以⽤多种⽅式进⾏展⽰,例如:散点图、饼状图、直⽅图、函数曲线、透视图等。)
关联规则挖掘和相关性分析:
分类和回归(分类例如:决策树、贝叶斯分类器、KNN分类器、组合分类算法等。回归是对数值型的函数进⾏建模,常⽤于数值预测。)
聚类分析(对未知类别标号的数据进⾏直接处理。聚类的⽬标是使聚类内数据的相似性最⼤,聚类间数据的相似性最⼩。)
异常检测或者离点分析
国家社科三、数据特征分析:
数据集类型:
结构化数据(通常以⽂本⽂件储存,例如:鸢尾花分类的训练集)
半结构化数据(主要有XML⽂档和JSON数据)
⾮结构化数据(没有预定义的数据模型,例如:邮件、客户评价反馈、财务报表、计算机系统的各种⽇志等、⾳频、图像(医学影响、卫星遥感图像等)、视频(监控录像、电视节⽬等)。
数据属性的类型:
标称属性(类似于标签,其中的数字或者符号只是⽤来对物体进⾏识别和分类)
序数属性(不仅包含标称属性的全部特征,还反映对象之间的等级和顺序)
数值属性(包含区间标度属性和⽐率标度属性)。
数据的描述性特征:
集中趋势的描述:
均值(算术平均数、加权平均数、⼏何平均数)、中位数、众数
离散程度的描述:
极差、四分位数、⽅差、标准差
分布形态的描述:
偏态系数、峰态系数
数据分布形态的度量:
数据的偏态分布及度量(偏态系数、样本偏态系数)
数据峰度及度量(衡量数据分布的平坦度)
数据偏度和峰度(⽤于估计数据分布与正态分布的差异)
数据分布特征的可视化:
箱型图(五数概括法)
正态分布
数据相关性分析:
散点图(直观判断相关性)
相关系数(协⽅差,反应两个属性在变化过程中是同⽅向变化,还是反⽅向变化)
四、数据预处理
数据清理
脏数据形成的原因:
不正确的数据:设备故障,⼈为输⼊错误,默认值提交,数据传输过程中产⽣的错误等。
不⼀致性:滥⽤缩写词,不同的惯⽤语,拼写变化,过时的编码,不同的计量单位等。
不完整数据:丢失值,信息收集不全,各种故障等。
重复记录:同⼀数据存储多次。
含有各种噪声:由误差造成的,也有可能是⼈为错误造成的。
数据清理处理的内容
缺失值填充
平滑噪声
识别和去除离点
解决不⼀致性
缺失值识别
可利⽤pandas提供的⽅法:
print("含有空值的列数:",data.isnull().any(axis=0).sum())
print(data.isnull().any())#.isnull().any() ⽤来判断列是否有缺失值
从糖尿病病⼈体检数据集⼊⼿
“糖尿病病⼈体检数据集”集包含了42个维度,⽤pandas、numpy、sklearn进⾏处理 维度例如:id,性别,年龄,体检⽇期,*天门冬氨酸氨基转换酶,*丙氨酸氨基转换酶,*碱性磷酸酶,*r-⾕氨酰基转换酶,*总蛋⽩,⽩蛋⽩,*球蛋⽩,⽩球⽐例,⽢油三酯,总胆固醇,⾼密度脂蛋⽩胆固醇....
import pandas as pd
train_data = pd.read_csv('d_train_20180102.csv',encoding='gbk')
print(lumns)
print(train_data.head)
print(train_data.isnull().sum())
处理缺失值的⽅法:
(1)删除法
import pandas as pd
diabetes_data = pd.read_csv('d_train_20180102.csv',encoding='gb2312')
diabetes_data.head()
#设定阀值
thresh_count = diabetes_data.shape[0]*0.7
#若某⼀列数据缺失的数量超过70%就会被删除
diabetes_data = diabetes_data.dropna(thresh=thresh_count, axis=1)
(2)估计法
⼈⼯填写空缺值(费时,当数据集很⼤、缺少很多值时,该⽅法⾏不通)
特殊值填充(使⽤⼀个全局常量填充空缺值:如:Unknown,NA,或∞)
使⽤属性的中⼼度量(数据分布是对称的,可以使⽤均值,⽽倾斜数据分布应该使⽤中位数)
使⽤最有可能值(⽤回归、贝叶斯、决策树、K近邻、EM等⽅法确定要填充的值,这类⽅法利⽤了数据间的关系来进⾏空值估计)
对数值型变量的缺失值,采⽤均值插补的⽅法来填充缺失值:
import pandas as pd
from sklearn.impute import SimpleImputer
from numpy import nan as NA
diabetes_data = pd.read_csv('糖尿病数据集_剩余维度数据.csv',encoding='gb2312')
diabetes_data.head()
#对数值型变量的缺失值,我们采⽤均值插补的⽅法来填充缺失值
imr = SimpleImputer(missing_values=NA, strategy='mean')
colume =["*天门冬氨酸氨基转换酶","*丙氨酸氨基转换酶","*碱性磷酸酶","*r-⾕氨酰基转换酶","*总蛋⽩","⽩蛋⽩","*球蛋⽩","⽩球⽐例","⽢油三酯","总胆固醇","⾼密度脂蛋⽩胆固醇","低密度脂蛋⽩胆固醇","尿素","肌酐","尿酸","⽩细胞计数","红细胞计数","⾎红蛋⽩","红细胞压积","红细胞平均体积","红细胞平均⾎红蛋⽩量","红细胞平均⾎红蛋⽩浓度","红细胞体积分布宽度","⾎⼩板计数","⾎⼩板平均体积","⾎⼩板体积分布宽度","⾎⼩板⽐积","中性粒细胞%","淋巴细胞%","单核细胞%","嗜酸细胞%","嗜碱细胞%","⾎糖"]
#进⾏插补
diabetes_data[colume]= imr.fit_transform(diabetes_data[colume])
path_dest ="糖尿病数据集_插补后数据.csv"
_csv(path_dest, mode='a', encoding='gb2312')
还可填充固定值、填充均值、填充中位数、填充众数、填充上下条的数据、填充插值得到的数据、填充KNN数据、填充模型预测的值
⼀般填充法:
#coding=utf-8
import numpy as np
import pandas as pd
del_selection import train_test_split
from sklearn.linear_model.logistic import LogisticRegression
# 评测指标,计算F1 score
def countF1(train, predict):
count =0# 统计预测的正确的正样本数
for i in range(len(train)):
if predict[i]==1and train[i]==1:
count +=1
pre =  count *1.0/sum(predict)# 准确率
recall =  count *1.0/sum(train)# 召回率
return2* pre * recall /(pre + recall)
train_data = pd.read_csv('糖尿病数据集_插补后数据.csv', encoding='gbk')
# 1000,854m3
filter_feature =['id','⽩蛋⽩']# 取预测值
features =[]
for x in lumns:# 取特征
if x not in filter_feature:
features.append(x)
# 缺失值填充
'''
train_data.fillna(0, inplace=True) # 填充 0
train_data.fillna(an(),inplace=True) # 填充均值
train_data.fillna(dian(),inplace=True) # 填充中位数
train_data.fillna(de(),inplace=True) # 填充众数,该数据缺失太多众数出现为nan的情况
features_mode = {}
for f in features:
print f,':', list(train_data[f].dropna().mode().values)
features_mode[f] = list(train_data[f].dropna().mode().values)[0]
train_data.fillna(features_mode,inplace=True)
train_data.fillna(method='pad', inplace=True) # 填充前⼀条数据的值,但是前⼀条也不⼀定有值
train_data.fillna(0, inplace=True)
train_data.fillna(method='bfill', inplace=True) # 填充后⼀条数据的值,但是后⼀条也不⼀定有值
train_data.fillna(0, inplace=True)
for f in features: # 插值法填充
train_data[f] = train_data[f].interpolate()
train_data.dropna(inplace=True)
'''
train_data.fillna(0, inplace=True)# 填充 0
train_data_x = train_data[features]
train_data_y = train_data['⽩蛋⽩']
X_train, X_test, y_train, y_test = train_test_split(train_data_x, train_data_y, random_state=1)# 划分训练集、测试集
linreg = LogisticRegression()
linreg.fit(X_train, y_train)# 模型训练
y_pred = linreg.predict(X_train)# 模型预测
print("训练集F1:",countF1(y_train.values, y_pred))
y_pred = linreg.predict(X_test)# 模型预测
print("测试集F1:",countF1(y_test.values, y_pred))
KNN填充:
import numpy as np
import pandas as pd
ss_validation import train_test_split
from sklearn.linear_model.logistic import LogisticRegression
思维定势from fancyimpute import BiScaler, KNN, NuclearNormMinimization, SoftImpute # stackoverflow/questions/51695071/pip-install-ecos-error-micro soft-visual-c-14-0-is-required
def countF1(train, predict):
count =0# 统计预测的正确的正样本数
for i in range(len(train)):
if predict[i]==1and train[i]==1:
count +=1
pre =  count *1.0/sum(predict)# 准确率
recall =  count *1.0/sum(train)# 召回率
return2* pre * recall /(pre + recall)
train_data = pd.read_csv('C:\\Users\\JingYi\\Desktop\\diabetes_prediction\\train_data.csv', encoding
='gbk')
# 1000,85
filter_feature =['id','label']# 取预测值
features =[]
for x in lumns:# 取特征
if x not in filter_feature:
features.append(x)
train_data_x = train_data[features]
train_data_x = pd.DataFrame(KNN(k=6).fit_transform(train_data_x), columns=features)
train_data_y = train_data['label']
X_train, X_test, y_train, y_test = train_test_split(train_data_x, train_data_y, random_state=1)# 划分训练集、测试集
linreg = LogisticRegression()
微生物学linreg.fit(X_train, y_train)# 模型训练
y_pred = linreg.predict(X_train)# 模型预测
print("训练集",countF1(y_train.values, y_pred))
y_pred = linreg.predict(X_test)# 模型预测
print("测试集",countF1(y_test.values, y_pred))
例:以Logistic回归模型和F1score作为评测指标,对⽐各种不同缺失值填充⽅法。
在某些情况下,缺失值并不意味着错误!
(3)不处理
补充处理只是将未知值补以我们的主观估计值,不⼀定完全符合客观事实
湖北省其他事业单位实施绩效工资指导意见
在对不完备信息进⾏补齐处理的同时,或多或少地改变了原始的信息系统
对缺失值不正确的填充往往将新的噪声引⼊数据中,使挖掘任务产⽣错误的结果
噪声处理
噪声:被测量的变量的随机误差或⽅差。
数据平滑技术,去掉噪声。(分箱、聚类、回归…)
分箱⽅法平滑噪声
礼乐制度

本文发布于:2024-09-22 21:22:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/68490.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   填充   属性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议