IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python缺失值处理的方法 -> 正文阅读

[人工智能]python缺失值处理的方法

咋说呢,这本来是我们统计老师给的一个小期中作业,方法并不详尽,我找了几个简单的,看个乐就行。泰坦尼克号数据集的使用是因为之前做过它的一系列分析,所以图个方便。其他数据文件由于缺失值比较少甚至没有缺失值,我就人为的制造缺失值,建议用代码实现这一过程。

目录

1、删除元组

(1)删除存在缺失值的个案

(2)删除含特殊值的特征

2、不处理

3、缺失值插补

(1)人工补齐数据,适用于规模小,缺失少的数据

(2)用平均数补齐数据

(3)用众数补齐数据

(4)回归建模填充数据

(5)K最近邻算法,最近k个样本的均值进行数据填补

?总结一下:

?其他方法:

方法总结:

1、删除元组

(1)删除存在缺失值的个案

举例:通过观察泰坦尼克数据集可以发现,数据的年龄Age这一变量存在部分缺失,可以尝试删除变量Age缺失的纪录

图为泰坦尼克数据集

import pandas as pd
import numpy as np
#读入数据
data=pd.read_csv('C:/Users/24580/Desktop/数据挖掘/train.csv')
data.head(30)
data1_1=data.dropna(subset=['Age'])
data1_1.head(20)

(2)删除含特殊值的特征

举例:通过观察泰坦尼克数据集可以发现,数据的Cabin这一变量大部分数据都未知,可以尝试将Cabin这一特征变量给删除

#(基于1.1的数据) 
data1_2=data.drop(columns=['Cabin'])
data1_2.head(20)

2、不处理

不处理,就直接进行下一步,贼佛系的做法,但总有一定依据

3、缺失值插补

有多种方式补齐数据,以下只简单罗列了5种方法

(1)人工补齐数据,适用于规模小,缺失少的数据

举例:在成绩表student中,由于小张的语文试卷不慎丢失,老师按照他上课的表现进行打分

import pandas as pd
import numpy as np
#读入数据
data=pd.read_excel('C:/Users/24580/Desktop/社会网络/student.xlsx')
data=data.fillna(95)
data

??

(2)用平均数补齐数据

举例:通过观察泰坦尼克数据集可以发现,数据的Age这一变量存在部分缺失,用平均数来插补缺失的Age值

#(基于1.1的数据)
#填充age(平均数)
data['Age']=data['Age'].fillna(data['Age'].median())
data3_2=data
data3_2.head(10)

(3)用众数补齐数据

举例:通过观察泰坦尼克数据集可以发现,数据的Embarked这一变量存在部分缺失,用众数来插补缺失的Embarked值

#(基于1.1的数据)
#填充embarked
cishu=data['Embarked'].value_counts()#计数
index_max=cishu.idxmax()
print(index_max)
data['Embarked']=data['Embarked'].fillna(index_max)
data3_3=data
data3_3.head(10)

(4)回归建模填充数据

举例:在Salary_Data.csv数据文件中包含两个变量,一个是工作年龄YearsExperience,一个是薪资水平Salary,其中Salary有部分数据缺失,鉴于YearsExperience与Salary有强烈的线性相关关系,故拟采用线性回归的方法进行数据填充

import pandas as pd
import numpy as np
import seaborn as sns
import statsmodels.api as sm
import matplotlib.pyplot as plt
#读入数据
data=pd.read_csv('C:/Users/24580/Desktop/社会网络/Salary_Data.csv')
data.head(10)
print(data.isna().sum())
#画散点图
sns.lmplot(x='YearsExperience',y='Salary',data=data,ci=None)
plt.show()
#有缺失的记录,建立需预测的子集
data_pred=data[np.isnan(data['Salary'])]
X_pred=pd.DataFrame(data_pred)
y_pred=data_pred['Salary']
#无缺失值的记录,即训练子集
data_train=data.dropna(subset=['Salary'],axis=0)
#建模
fit=sm.formula.ols('Salary~YearsExperience',data=data_train).fit()
print(fit.params)
#预测
y_pred=fit.predict(X_pred)
print(y_pred)
data_pred['Salary']=y_pred
print(data_pred)
#数据合并
data=data_train.append(data_pred)
data.head(10)

? 共5个缺失值

??散点图表示两者存在明显线性关系

?回归方程系数

??为预测的缺失部分的估计值,将数据合并即可

(5)K最近邻算法,最近k个样本的均值进行数据填补

举例:CCPP数据集中,前四个变量是自变量,最后一列为连续的因变量PE,表示高炉的发电量,其中PE列存在数据缺失,拟通过KNN模型进行预测填补

其中最佳的临近个数设置为7,是通过10重交叉验证所选取的最佳K值

(本代码段未包含交叉验证的代码)

import pandas as pd
import numpy as np
from sklearn import neighbors
from sklearn.preprocessing  import minmax_scale
#读入数据
data=pd.read_excel('C:/Users/24580/Desktop/社会网络/CCPP.xlsx')
data.head(10)
predictors=data.columns[:-1]#自变量名称
X=minmax_scale(data[predictors])#标准化
print(data.isna().sum())  #缺失值个数
#有缺失的记录,建立需预测的子集
data_pred=data[np.isnan(data['PE'])]
x_test=pd.DataFrame(data_pred[predictors])
y_test=data_pred['PE']
#无缺失值的记录,即训练子集
data_train=data.dropna(subset=['PE'],axis=0)
y_train=data_train['PE']
x_train=data_train[predictors]
#建模
knn=neighbors.KNeighborsRegressor(n_neighbors=7,weights='distance')
knn.fit(x_train,y_train)
#预测
pred=knn.predict(x_test)
print(pred)
data_pred['PE']=pred
print(data_pred)
#数据合并
data=data_train.append(data_pred)
data.head(10)

原数据

???共15个缺失

预测的15个缺失值,将数据合并即可

?总结一下:

?其他方法:

1、针对时间序列可以通过建模进行预测,然后填补数据

2、多重插补

3、热卡填充……

还有很多方法可以使用,按我的拙见是:只要能进行预测的模型,按理都可以预测缺失值,只是模型的准确率会有所不同

方法总结:

大致梳理一下回归和KNN进行预测的步骤,其他有的模型也可参照这样:

1、观察数据,选择所需模型或方法

2、将有缺失的数据记录从原数据集中提取出来,形成测试集test

(如果需要将自变量、因变量数据拆分,则拆分为x_test,y_test)

剩余部分形成训练集train

(同理,训练集可能也需要拆分)

3、对训练集train进行建模

4、对测试集test进行模型的预测,得到估计值

5、将估计值与原数据合并

(总感觉自己说的废话,hhh,看看就行)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:52:28  更:2021-11-15 15:53:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:24:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码