[github-100天机器学习]day1 data preprocessing-版本问题已修正

https://github.com/LiuChuang0059/100days-ML-code/blob/master/Day1_Data_preprocessing/README.md#step-6-feature-scaling—特征缩放

数据预处理

  1. 导入库:numpy包含数学计算函数,pandas用于导入和管理数据集
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Aug  6 02:15:40 2018

@author: liuchuang
"""

### Step 1: Importing the libraries

import numpy as np
import pandas as pd

  1. 导入数据集:用pandas的read_csv方法读本地csv为数据帧

### Step 2: Importing dataset

dataset = pd.read_csv('Data.csv')
# iloc 方法的索引是基于位置的,而不是基于标签的
X = dataset.iloc[ : , :-1].values
# 使用 Pandas 库中的 iloc 方法从数据集中提取特征(自变量)的部分
# 通过 iloc 方法可以按照索引位置来选择数据。
# 在这里,: 表示选择所有的行,-1 表示选择除了最后一列之外的所有列。
# .values 用于将结果转换为 NumPy 数组
Y = dataset.iloc[ : , 3].values #选择索引为 3 的列
  1. 处理丢失数据:替换nan值,用sklearn.preprocessing库的Imputer类
### Step 3: Handling the missing data
### 使用整列的中位数或者平均值表示缺失值

from sklearn.impute import SimpleImputer   #new
#from sklearn.preprocessing import Imputer   #old-教程里的

# 从 Scikit-learn 0.22 版本开始,Imputer 类已被 SimpleImputer 类取代

# 使用sklearn.preprocessing 中的 Imputer类
imputer = SimpleImputer(missing_values=np.nan, strategy='mean') #new
# 使用均值mean来填充缺失值,其他方法: median(中位数)、most_frequent(最频繁值)
# imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0) #old
imputer = imputer.fit(X[ : , 1:3])
# 使用 fit 方法将 SimpleImputer 对象适应(fit)到数据集的指定列
# X[:, 1:3] 表示选取数据集 X 的所有行(:),以及列索引为 1 到 2(不包括索引 3)的列(1:3)
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
# 使用 transform 方法将填充后的数据替换原始数据集中指定的列
# imputer 对象将使用之前计算得到的填充信息来填充 X 数据集中选定的列,将缺失值替换为填充值

  1. 解析分类数据:把标签值解析为数字,sklearn.preprocessing库导入LabelEncoder类
### step4: Encoding categorical data

#对数据集中的特征进行编码,其中包括标签编码和独热编码
from sklearn.compose import ColumnTransformer   #new
# ColumnTransformer用于进行列变换

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# LabelEncoder用于标签编码,和OneHotEncoder用于独热编码
# 对第一个特征列进行标签编码
labelencoder_X = LabelEncoder()     # 使用 LabelEncoder 对第一个特征列进行标签编码
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])#将label值转换为数值
labelencoder_X = LabelEncoder()     
# 使用 LabelEncoder 对第一个特征列进行标签编码,将类别值转换为数值
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
# 对数据集X的第一个特征列(索引0)进行标签编码,将该列中的类别值转换为数值

# 使用 ColumnTransformer 类指定对第一个特征列进行独热编码,并将其与 OneHotEncoder 相关联。
ct = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough')#new
X = ct.fit_transform(X)#new
#onehotencoder = OneHotEncoder(categorical_features = [0])#old
#X = onehotencoder.fit_transform(X).toarray()    #old
# 使用ColumnTransformer将第一个特征列进行独热编码。
# ColumnTransformer允许你在数据集中的不同列上应用不同的数据预处理步骤
# 在这里,我们指定要对索引为0的列应用OneHotEncoder进行独热编码,
# 并通过remainder='passthrough'选项保留其余的列不变。
# 最后,fit_transform方法将应用所选的数据预处理步骤,并更新数据集X。

#对目标变量进行标签编码
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

# 标签编码将类别转换为数值
# 独热编码则将这些数值表示为二进制向量,以避免模型错误地将类别之间的关系当作连续关系

  1. 拆分dataset为test和training:一个训练一个测试(8:2),sklearn.crossvalidation库的train_test_split()方法
### Step 5: Splitting the datasets into training sets and Test sets


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)
# X是包含特征的数据集。
# Y是包含目标变量(标签)的数据集。
# test_size指定了测试集的大小,表示将20%的数据分配给测试集,而80%的数据用于训练集
# random_state是一个随机种子,用于确保每次运行代码时得到相同的随机分割
# 返回:X_train:训练集的特征数据。X_test:测试集的特征数据。
# Y_train:训练集的目标变量数据。Y_test:测试集的目标变量数据


在这里插入图片描述

  1. 特征缩放:sklearn.preprocessing库的StandardScalar类

### Step 6: Feature Scaling---特征缩放


from sklearn.preprocessing import StandardScaler
# 对特征进行标准化(特征缩放)

# 标准化是一种常见的数据预处理步骤,它有助于确保不同特征具有相似的尺度,以改善机器学习模型的性能。

sc_X = StandardScaler() #对特征矩阵进行特征缩放
# 创建了一个StandardScaler对象,用于对特征进行标准化
X_train = sc_X.fit_transform(X_train)
# 使用fit_transform方法将训练集X_train中的特征进行标准化
# 计算特征的均值和标准差,并将每个特征进行标准化,使其具有零均值和单位方差
X_test = sc_X.fit_transform(X_test)
# 使用fit_transform方法将测试集X_test中的特征进行标准化

# 使用相同的标准化器对象来对训练集和测试集进行标准化,
# 以确保它们使用相同的均值和标准差进行标准化,从而保持数据的一致性。

# 标准化后的特征具有零均值和单位方差,这有助于确保不同特征之间的尺度差异不会对机器学习模型的性能产生负面影响

在这里插入图片描述

csv数据集
Country,Age,Salary,Purchased
France,44,72000,No
Spain,27,48000,Yes
Germany,30,54000,No
Spain,38,61000,No
Germany,40,,Yes
France,35,58000,Yes
Spain,,52000,No
France,48,79000,Yes
Germany,50,83000,No
France,37,67000,Yes

数据帧(Data Frame) 二维的表格形式,类似于电子表格或关系型数据库中的表。数据帧通常被用来存储和操作结构化数据。数据以行和列的形式组织。每一列代表一个变量,每一行代表一个观察或数据点。

例子:

data = {
    'Name': ['John', 'Emma', 'Mike', 'Lisa'],
    'Age': [28, 24, 32, 29],
    'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']
}

df = pd.DataFrame(data)

# 打印数据帧
print(df)

# 输出:
#    Name  Age           City
# 0  John   28       New York
# 1  Emma   24  San Francisco
# 2  Mike   32        Chicago
# 3  Lisa   29    Los Angeles

请添加图片描述

请添加图片描述

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Aug  6 02:15:40 2018

@author: liuchuang
"""

### Step 1: Importing the libraries

import numpy as np
import pandas as pd


### Step 2: Importing dataset

dataset = pd.read_csv('Data.csv')
# iloc 方法的索引是基于位置的,而不是基于标签的
X = dataset.iloc[ : , :-1].values
# 使用 Pandas 库中的 iloc 方法从数据集中提取特征(自变量)的部分
# 通过 iloc 方法可以按照索引位置来选择数据。
# 在这里,: 表示选择所有的行,-1 表示选择除了最后一列之外的所有列。
# .values 用于将结果转换为 NumPy 数组

Y = dataset.iloc[ : , 3].values #选择索引为 3 的列


### Step 3: Handling the missing data
### 使用整列的中位数或者平均值表示缺失值

from sklearn.impute import SimpleImputer   #new
#from sklearn.preprocessing import Imputer   #old-教程里的

# 从 Scikit-learn 0.22 版本开始,Imputer 类已被 SimpleImputer 类取代

# 使用sklearn.preprocessing 中的 Imputer类
imputer = SimpleImputer(missing_values=np.nan, strategy='mean') #new
# 使用均值mean来填充缺失值,其他方法: median(中位数)、most_frequent(最频繁值)
# imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0) #old
imputer = imputer.fit(X[ : , 1:3])
# 使用 fit 方法将 SimpleImputer 对象适应(fit)到数据集的指定列
# X[:, 1:3] 表示选取数据集 X 的所有行(:),以及列索引为 1 到 2(不包括索引 3)的列(1:3)
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
# 使用 transform 方法将填充后的数据替换原始数据集中指定的列
# imputer 对象将使用之前计算得到的填充信息来填充 X 数据集中选定的列,将缺失值替换为填充值


### step4: Encoding categorical data


from sklearn.compose import ColumnTransformer   #new

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 对第一个特征列进行标签编码
labelencoder_X = LabelEncoder()     
# 使用 LabelEncoder 对第一个特征列进行标签编码,将类别值转换为数值
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])

# 使用 ColumnTransformer 类指定对第一个特征列进行独热编码,并将其与 OneHotEncoder 相关联。
ct = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough')#new
X = ct.fit_transform(X)#new
#onehotencoder = OneHotEncoder(categorical_features = [0])#old
#X = onehotencoder.fit_transform(X).toarray()    #old
# 使用 ColumnTransformer 来代替过时的 categorical_features 参数,以实现对指定列的独热编码


#对目标变量进行标签编码
labelencoder_Y = LabelEncoder() #使用 LabelEncoder 对目标变量进行标签编码
Y =  labelencoder_Y.fit_transform(Y)


### Step 5: Splitting the datasets into training sets and Test sets


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)
# 数据集分成训练集和测试集
# 分的比例通常 8:2
# 使用sklearn.cross_validation 中 train_test_split 类


### Step 6: Feature Scaling---特征缩放

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)

# 使用欧几里得距离
# 特征与 标度有关,一个特征比其他的特征范围更大 该特征值成为主导
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值