社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习一:数据预处理

Cassie1492949236626 • 6 年前 • 647 次点击  
阅读 43

机器学习一:数据预处理

最近一直在学习机器学习的知识,入门很难。之前跟着吴恩达老师的视频在学习,发现还是有很多的知识点难以理解。前不久,《机器学习A-Z》出了中文翻译,老师讲的非常浅显易懂,所以开始跟着学起来了。

为了能更系统的整理到学的知识进行一个整理,也作为一个自我监督,接下来就把较为系统的知识点都整理到博客上。相应的代码也会同步到github上。

下面所有的代码都是使用Python写的,数据预处理主要用到的是sklearn.preprocessing模块 [sklearn.apachecn.org/cn/0.19.0/m…]

目录

在机器学习一的这部分,我主要说一下数据的预处理。

1.导入标准库

  • numpy:包含很多机器学习需要用到的数学方法
  • matplotlib.pyplot:主要用于绘图
  • pandas:导入数据集以及对数据集进行一系列的处理
import numpy as np
import matplotlib.pyplot as plt 
import pandas as pd
复制代码

2.导入数据集

iloc数组中参数:逗号左边表示行数,逗号右边表示列数,冒号表示选择所有行或者列

# Import the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values
复制代码

3.缺失数据

一般处理数据缺失的方法包括平均数填充、中位数填充,众数填充。在Imputer类中的strategy的可选参数中可以进行选择。

Imputer这个类主要用于缺失数据的处理 参数axis:

  • axis = 0 取一列的平均值
  • axis = 1 取一行的平均值

参数strategy: strategy : string, optional (default="mean") The imputation strategy.

  • If "mean", then replace missing values using the mean along the axis.
  • If "median", then replace missing values using the median along the axis.
  • If "most_frequent", then replace missing using the most frequent value along the axis.
# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)
imputer.fit(X[:,1:3])  #代表1和2
X[:,1:3] = imputer.transform(X[:,1:3])
复制代码

4.分类数据

4.1. 标签编码

作用:将文本转换为数字

缺点:在开始的时候不同的国籍并没有数值的区分,将不同的国家转换为数值之后0,1,2之后,对于不同的类就有大小之分,所以对不同的类进行了排序。

解决方案:独热编码(虚拟编码)

4.2. 独热编码(虚拟编码)(dummy coding)

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:,0])

onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()

labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

# Encode labels with value between 0 and n_classes-1(将不同组的名称转换为数字)
复制代码

5.将数据集划分为训练集和测试集

  • test_size:0到1之间,默认值为0.25 一般情况下比较好的为0.2或者0.25
  • random_state:决定随机数生成的方式
# splitting dataset into Training set and Test set
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)
复制代码

6.特征缩放

为什么要对数据进行特征缩放?

欧氏距离(两个点之间线段的长度),在很多机器学习的算法中非常重要。

将不同数量级的数据缩放到同一个数量级,如果不进行特征缩放,年龄在工资的比较下影响就会变得非常小。

为了解决这个问题,我们需要将Age和Salary缩放到同一个数量级里面。

6.1. 标准化(Standardisation)

得到的新的数据平均值为0,并且方差为1 运用在支持向量机、逻辑回归、类神经网络

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
复制代码

6.2. 归一化(Normalisation)

将所有的值投射到0和1之间

import sklearn.preprocessing as sp
mms = sp.MinMaxScaler(feature_range=(0,1))
mms_samples2 = mms.fit_transform(raw_samples)
复制代码

7.数据预先处理模板

import numpy as np
import matplotlib.pyplot as plt 
import pandas as pd

# Import the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values

# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)
imputer = Imputer()
test = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:,0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

# Splitting the dataset into the Training set and Test set
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)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
复制代码

8.问题

8.1. fit、fit_transform、transform之间的区别?

  • fit():简单来说,就是求得训练集的均值、方差、最大值、最小值,也就是训练集X的属性,可以理解为一个训练过程;
  • Transform():在fit的基础上,进行标准化、降维、归一化等操作;
  • fit_transform():是fit和transform的组合,既包含训练又包含转换。

注意:

  1. 必须先用fit_transform(trainData),之后再用transform(testData);
  2. 如果直接使用transform(testData)会报错;
  3. 如果fit_transform(trainData)后,使用fit_transform(testData)而不是transform(testData),虽然也能归一化,但是两个结果是不在同一个“标准”下的,具有明显的差异。

8.2. 标准化和归一化的区别以及各自作用的场景?

www.jianshu.com/p/95a8f035c…


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/CapSh4RYNd
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26117
 
647 次点击