ML_code-入门(1)

主要依据爆红GITHUB的百日入门机器学习项目,跟进学习;原文展示的python代码部分进行学习,额外会尝试使用R解决,希望能少弃一些章节。Github原链接https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/Code/Day%201_Data%20PreProcessing.md。本次主要进行机器学习的入门,内容比较基础。

1 获得数据集(get the dataset)数据集包括两部分,独立变量(independent variable)和依赖变量(dependent variable。机器学习的目的就是需要通过独立变量来预测非独立变量(prediction)。

2 导入数据集(importing dataset)先设置working directory, 将代码与数据保存在working directory文件夹下

# 设置working directorygetwd()setwd("C:\\Users\\Maojie\\Documents\\ML\\day1\\")

# Importing the datasetdataset View(dataset)

Age和Salary是独立变量,通过这两个独立变量预测是否会Purchase(非独立变量)。

3 处理空数据(Handling the missing data)在数据集中可能会出现为空的数据,我们不能删除有空数据的列,这会对我们机器学习的结果造成影响,NA有很多处理方法(后续分享),此处用mean来代替空值。

# Taking care of missing datadataset$Age = ifelse(is.na(dataset$Age),mean(dataset$Age, na.rm = TRUE),dataset$Age)

dataset$Salary = ifelse(is.na(dataset$Salary),ave(dataset$Salary, FUN = function(x) mean(x, na.rm = TRUE)),dataset$Salary)

Country Age Salary Purchased1 France 44.00000 72000.00 No2 Spain 27.00000 48000.00 Yes3 Germany 30.00000 54000.00 No4 Spain 38.00000 61000.00 No5 Germany 40.00000 63777.78 Yes6 France 35.00000 58000.00 Yes7 Spain 38.77778 52000.00 No8 France 48.00000 79000.00 Yes9 Germany 50.00000 83000.00 No10 France 37.00000 67000.00 Yes4 分类数据(Encoding categorical data)对于数据集中的同类别的数据(如country列)为非numerical的数据,可以用数字1,2,3区分不同国家,但是会出现问题。国家之间地位相同,但数字有大小之分。因此需要设置哑变量,不同的类别(如不同国家)单独分为一个列,属于这个国家的设置为1,不属于的设置为0。注:在R语言中不需要特别将每一类别分为一列,因为每一列用vector来表示,可以接受不同的大小。

# Encoding categorical datadataset$Country = factor(dataset$Country,levels = c('France', 'Spain', 'Germany'),labels = c(1, 2, 3))dataset$Purchased = factor(dataset$Purchased,levels = c('No', 'Yes'),labels = c(0, 1))

5 将数据集分类当数据集准备完成之后,将独立变量和依赖变量分为训练集和测试集。训练集与测试集的比例一般是用4:1。# Splitting the dataset into the Training set and Test set# install.packages('caTools')library(caTools)set.seed(123)split = sample.split(dataset$Purchased, SplitRatio = 0.8)training_set = subset(dataset, split == TRUE)test_set = subset(dataset, split == FALSE)

test_setCountry Age Salary Purchased6 1 35 58000 19 3 50 83000 0

6 特征量化 (feature scaling)数据处理的重要步骤,在机器学习中,由于每个变量的范围不同,如果两个变量之间差距太大,会导致距离对结果产生影响。需要一定的标准化改变,最简单的方式是将数据缩放至[0.1]或者[-1,1]之间:

# Feature Scalingtraining_set[, 2:3] = scale(training_set[, 2:3])test_set[, 2:3] = scale(test_set[, 2:3])

test_setCountry Age Salary Purchased6 1 -0.7071068 -0.7071068 19 3 0.7071068 0.7071068 0

Done 建立模板经过以上几个简单的对数据进行预处理的步骤,既为初步的分析模板,下面就开始真正的机器学习入门到放弃了。

R代码如下:# Data Preprocessing template# Importing the datasetdataset

# Taking care of missing datadataset$Age = ifelse(is.na(dataset$Age),mean(dataset$Age, na.rm = TRUE),dataset$Age)

dataset$Salary = ifelse(is.na(dataset$Salary),ave(dataset$Salary, FUN = function(x) mean(x, na.rm = TRUE)),dataset$Salary)

# Encoding categorical datadataset$Country = factor(dataset$Country,levels = c('France', 'Spain', 'Germany'),labels = c(1, 2, 3))dataset$Purchased = factor(dataset$Purchased,levels = c('Yes','No'),labels = c(1, 0))

# Splitting the dataset into the Training set and Test setlibrary(caTools)set.seed(123)split = sample.split(dataset$Purchased, SplitRatio = 0.8)training_set = subset(dataset, split == TRUE)test_set = subset(dataset, split == FALSE)

# Feature Scalingtraining_set[, 2:3] = scale(training_set[, 2:3])test_set[, 2:3] = scale(test_set[, 2:3])

参考资料:

https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/Code/Day%201_Data%20PreProcessing.md

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181122G12JMI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券