机器学习中数据清洗&预处理
数据预处理是建立机器学习模型的第一步,对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效
第一步,导入数据
进行学习的第一步,我们需要将数据导入程序以进行下一步处理
加载 nii
文件并转为 numpy 数组
import nibabel as nib
from skimage import transform
import os
import numpy as np
img = nib.load(img_file)
img = img.get_fdata()
img = transform.resize(img[:, :, :, 0], (256, 256, 5))
img = np.squeeze(img)
train_img[i - 1, :, :, :] = img[:, :, :]
第二步,数据预处理
Python提供了多种多样的库来完成数据处理的的工作,最流行的三个基础的库有:Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库,由于代码是基于数学公式运行的,因此就会使用到它。Maplotlib(具体而言,Matplotlib.pyplot)则是满足绘图所需要的库。Pandas 则是最好的导入并处理数据集的一个库。对于数据预处理而言,Pandas 和 Numpy 基本是必需的
在导入库时,如果库名较长,最好能赋予其缩写形式,以便在之后的使用中可以使用简写。如
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
导入数据
import pandas as pd
def read_data(file_name : str):
suffix = file_name.split('.')
if suffix[1] == "csv":
dataset = pd.read_csv(file_name)
return dataset
return None
读取的数据为
animal | age | worth | friendly | |
---|---|---|---|---|
0 | cat | 3 | 1200.0 | yes |
1 | dog | 4 | 2400.0 | yes |
2 | dog | 3 | 7000.0 | no |
3 | cat | 2 | 3400.0 | yes |
4 | moose | 6 | 4000.0 | no |
5 | moose | 3 | NaN | yes |
将数据划分为因变量和自变量($ y = f(x)$)
dataset = read_data("data.csv") # pandas.core.frame.DataFrame
print(dataset)
x = dataset.iloc[:, :-1].values # 将Dataframe转为数组,且不包括最后一列
y = dataset.iloc[:, 3].values # dataset最后一列
\begin{bmatrix}
{'cat'} & {3} & {1200.0} \\
{'dog'} & {4} & {2400.0} \\
{'dog'} & {3} & {7000.0} \\
{'cat'} & {2} & {3400.0} \\
{'moose'} & {6} & {4000.0} \\
{'moose'} & {3} & {nan}
\end{bmatrix} \\
y = ['yes', 'yes', 'no', 'yes', 'no', 'yes']
\]
可见 \(x\) 中是有一项数据是缺失的,此时可以使用 scikit-learn 预处理模型中的 imputer 类来填充缺失项
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = np.nan, strategy = 'mean', axis = 0) # 使用均值填充缺失数据
imputer = imputer.fit(x[:, 1:3])
x[:, 1:3] = imputer.transform(x[:, 1:3])
其中 missing_values
指定了待填充的缺失项值, strategy
指定填充策略,此处填充策略使用的是均值填充,也可以使用中值,众数等策略
填充结果
{'cat'} & {3} & {1200.0} \\
{'dog'} & {4} & {2400.0} \\
{'dog'} & {3} & {7000.0} \\
{'cat'} & {2} & {3400.0} \\
{'moose'} & {6} & {4000.0} \\
{'moose'} & {3} & {3600.0} \\
\end{bmatrix}
\]
这种填充适用于数字的填充,如果是属性填充,我们可以将属性数据编码为数值。此时我们可以使用 sklearn.preprocessing 所提供的 LabelEncoder 类
from sklearn.preprocessing import LabelEncoder
print(y)
labelencoder = LabelEncoder()
y = labelencoder.fit_transform(y)
print(y)
编码结果
\Downarrow \\
y = [1, 1, 0, 1, 0, 1]
\]
训练集与测试集的划分
此时我们可以使用 sklearn.model_selection.train_test_split
来进行划分
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)
进行测试集与训练集划分的一种常见的方法是将数据集按 80/20 进行划分,其中 80% 的数据用作训练,20% 的数据用作测试,由 test_size = 0.2
指明,random_state
指定是否随机划分
特征缩放
当我们的数据跨度很大的话或者在某些情况下(如:学习时,模型可能会因数据的大小而给予不同的权重,而我们并不需要如此的情况),我们可以将数据特征进行缩放,使用 sklearn.preprocessing.StandardScaler
from sklearn.preprocessing import StandardScaler
x[:, 0] = labelencoder.fit_transform(x[:, 0]) # 将属性变为数字
print(x_train)
sc_x = StandardScaler() #
x_train = sc_x.fit_transform(x_train)
x_test = sc_x.transform(x_test)
print(x_train)
结果
{1} & {4.0} & {2400.0} \\
{0} & {2.0} & {3400.0} \\
{0} & {3.0} & {1200.0} \\
{2} & {6.0} & {4000.0}
\end{bmatrix}
\]
\]
{0.30151134} & {0.16903085} & {-0.32961713} \\
{-0.90453403} & {-1.18321596} & {0.61214609} \\
{-0.90453403} & {-0.50709255} & {-1.45973299} \\
{1.50755672} & {1.52127766} & {1.17720402}
\end{bmatrix}
\]
机器学习中数据清洗&预处理的更多相关文章
- 100天搞定机器学习|Day1数据预处理
数据预处理是机器学习中最基础也最麻烦的一部分内容 在我们把精力扑倒各种算法的推导之前,最应该做的就是把数据预处理先搞定 在之后的每个算法实现和案例练手过程中,这一步都必不可少 同学们也不要嫌麻烦,动起 ...
- 机器学习PAL数据预处理
机器学习PAL数据预处理 本文介绍如何对原始数据进行数据预处理,得到模型训练集和模型预测集. 前提条件 完成数据准备,详情请参见准备数据. 操作步骤 登录PAI控制台. 在左侧导航栏,选择模型开发和训 ...
- 机器学习中的相似性度量(Similarity Measurement)
机器学习中的相似性度量(Similarity Measurement) 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间 ...
- paper 127:机器学习中的范数规则化之(二)核范数与规则项参数选择
机器学习中的范数规则化之(二)核范数与规则项参数选择 zouxy09@qq.com http://blog.csdn.net/zouxy09 上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮 ...
- paper 126:[转载] 机器学习中的范数规则化之(一)L0、L1与L2范数
机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...
- 机器学习中的范数规则化之(一)L0、L1与L2范数
L1正则会产生稀疏解,让很多无用的特征的系数变为0,只留下一些有用的特征 L2正则不让某些特征的系数变为0,即不产生稀疏解,只让他们接近于0.即L2正则倾向于让权重w变小.见第二篇的推导. 所以,样本 ...
- ML 07、机器学习中的距离度量
机器学习算法 原理.实现与实践 —— 距离的度量 声明:本篇文章内容大部分转载于July于CSDN的文章:从K近邻算法.距离度量谈到KD树.SIFT+BBF算法,对内容格式与公式进行了重新整理.同时, ...
- paper 56 :机器学习中的算法:决策树模型组合之随机森林(Random Forest)
周五的组会如约而至,讨论了一个比较感兴趣的话题,就是使用SVM和随机森林来训练图像,这样的目的就是 在图像特征之间建立内在的联系,这个model的训练,着实需要好好的研究一下,下面是我们需要准备的入门 ...
- 机器学习中的范数规则化之(一)L0、L1与L2范数(转)
http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...
随机推荐
- c++中的const与指针
const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: ( ...
- Java记事本编写第一个程序“你好,世界”
- [转]kaldi基于GMM做分类问题
转自:http://blog.csdn.net/zjm750617105/article/details/55211992 对于每个类别的GMM有几种思路: 第一是将所有训练数据按类别分开,每类的数据 ...
- Java开发微服务为什么一定要选spring cloud?
来自:网易乐得技术团队,作者:董添 李秉谦 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些技术中的翘楚 ...
- Win10下python不同版本同时安装并解决pip共存问题
特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下 ...
- 转载----开发者大杀器 —— 刨根问底,揪出 Android App 耗电的元凶代码
转载文章地址:http://www.jianshu.com/p/27ba2759b221
- Java学习笔记四:三目运算符与字符串连接符等
一 .三目运算符与自增自减 GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/OperPrac02.java 条件运算符由 ...
- Eclipse 配置 Tomcat 服务器
配置Tomcat 在首先外部安装好Tomcat,然后在eclipse配置Tomcat服务器: 选择要配置的Tomcat版本: 注意:这一步如果勾选了Create a new local server ...
- Kali学习笔记11:僵尸扫描案例
什么是僵尸扫描?本质也是端口扫描,不过是一种极其隐蔽的扫描方式 所以几乎不会被发现,不过也有着很大缺陷:扫描条件很高 首先需要有一台僵尸机,这里我找好一台win10僵尸机器,IP地址为:10.14.4 ...
- [Postman]证书(13)
Postman的本机应用程序提供了一种基于每个域查看和设置SSL证书的方法. 要管理客户端证书,请单击标题工具栏右侧的扳手图标,选择“设置”,然后选择“ 证书”选项卡. 添加客户端证书 要添加新客户端 ...