Machine Learning A-Z(1)

Data preprocessing


数据获取地址: https://www.superdatascience.com/下载数据集/

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('Data.csv')

X = dataset.iloc[:,:-1].values# 获取自变量,通过行列指定获取的位置,values获取数据,返回一个numpy
y = dataset.iloc[:, 3].values


"""
缺失数据的处理
直接删除:如果数据量很大,那么可以直接删除;如果数据量很小或者确实数据中其他参数含有比较重要的信息那么该方法会造成很大误差
根据未缺失数据填充
"""
from sklearn.preprocessing import Imputer
# Imputer方法用来对缺失数据进行处理
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)# 将标记为NaN的数据认为缺失数据,strategy表明填充策略,本句采用均值,axis指定取均值的位置
imputer = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])


"""
将数据中不为数字(字符串等)的数据进行标记
"""
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])# 对第一行的数据用十进制数进行标记
onehotencoder = OneHotEncoder(categorical_features=[0])# 将数据编码为one-hot形式
# 直接labelencoder数据会让数据带有大小区别,而且会在不同数据之间建立联系
# one-hot标记可以使欧式距离的计算更加方便
# 参考:https://hackernoon.com/what-is-one-hot-encoding-why-and-when-do-you-have-to-use-it-e3c6186d008f
X = onehotencoder.fit_transform(X).toarray()# 将数据转化为numpy
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)


"""
将数据集切分为训练集和测试集
"""
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)# 将数据切分为训练和测试集,比例通过test_size指定,random_state保证随机结果一直不变


"""
特征缩放
将不同数量级的数据缩放至同一数量级
加快收敛速度
"""
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
# 这里和课程中不一样,课程中将每个维度都进行了归一化,我认为前三个用作标记string的维度不需要归一化
X_train[:,3:]  = sc_X.fit_transform(X_train[:,3:])
X_test[:,3:] = sc_X.transform(X_test[:,3:])# 这里不用fit_transform是因为sklearn中的fit函数用来训练某个类需要的参数
                               # 经过X_train = sc_X.fit_transform(X_train)这一步,sc_X中存储着由X_train得到的均值等数据
                               # 为了让test与train归一化相同数值,所以用X_train得到的参数
               

猜你喜欢

转载自blog.csdn.net/qq_33669204/article/details/84192301
今日推荐