这是一个机器学习的系列,偏数据分析方向,将来或许会写一些偏人工智能方向的机器学习的文章。这个系列将会详细介绍经常使用的机器学习模型和算法,像是线性回归和分类算法。最后会介绍机器学习方向合适的一些可视化工具。python
我是程序员出身,这个系列中全部的代码我会用Python和R语言同时演示,可是算法的内部逻辑运算我也会用Java或者Python演示。也就是说从这个系列中你不只仅能够学会如何使用Python和R进行机器学习,也能够用习惯的编程语言编写本身的机器学习库。程序员
如今就让咱们进入机器学习的世界吧!算法
这一节主要进行机器学习的入门。内容比较基础。编程
编程环境的话依我的喜爱而定,我也不会推荐任何IDE,可是我会贴出代码。dom
在作机器学习以前须要有结构化的数据(structure data)才行。网上有不少网站能够提供这些数据。我也会给你们提供一些简单的数据集。机器学习
首先咱们使用一个简单的数据集。每个数据集都会包括两部分,独立变量(independent variable)和依赖变量(dependent variable)。机器学习的目的就是须要经过独立变量来预测非独立变量(prediction)。
独立变量不会被影响而非独立变量可能被独立变量影响。编程语言
在如下数据集中Age和Salary就是独立变量,咱们须要经过这两个独立变量预测是否会Purchase。因此Purchased就是非独立变量。工具
下面咱们要准备Python的编程环境,在Python中有不少数据科学的库(见个人Data Scienc系列),咱们须要的主要是如下三个库:学习
import numpy as np import matplotlib.pyplot as plt import pandas as pd
在导入数据以前你须要设置working directory, 就是将代码与数据保存在同一文件夹下。测试
import numpy as np import matplotlib.pyplot as plt import pandas as pd dataset = pd.read_csv('Data.csv') #能够选中salary,点击Format, 改为 %0f 。
机器学习或者说数据科学中很重要的一点就是创建metrics(度量,指标)。每一列均可以是一个metric。
metrics主要包括两部分:independent variable 和 dependent variable。
# create 独立变量vector X = dataset.iloc[:, :-1].values # 第一个冒号是全部列(row),第二个是全部行(column)除了最后一个(Purchased)
# create 依赖变量vector Y = dataset.iloc[:, 3 ].values # 只取最后一个column做为依赖变量。
# 设置working directory getwd() setwd("/Users/ML1/") dataset = read_csv('Data.csv') View(dataset)
在数据集中可能会出现为空的数据,咱们不能删除有空数据的列,这样会对咱们机器学习的结果形成影响,在data science中咱们能够用NaN代替空值,可是在ML中必需要求数据为numeric。因此咱们能够用mean来代替空值。
原数据集如图:
代码以下:
# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd # Importing 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.fit(X[:, 1:3]) # (inclusive column 1, exclusive column 3, means col 1 & 2) X[:, 1:3] = imputer.transform(X[:, 1:3]) # 将imputer 应用到数据
结果以下图所示:
R 语言代码以下:
# Data Preprocessing # Importing the dataset dataset = read.csv('Data.csv') # Taking care of missing data dataset$Age = ifelse(is.na(dataset$Age), ave(dataset$Age, FUN = function(x) mean(x, 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)。这样的数据是非numerical的数据,因此咱们能够用数字来代替,好比不一样的国家咱们能够用1,2,3区分不一样国家,可是这样会出现一个比较严重的问题。就是国家之间的地位是相同的,可是数字有顺序大小之分。因此咱们用另外一种方法,就是将不一样的类别(如不一样国家)另外分为一个列,属于这个国家的设置为1,不属于的设置为0.:
# Encoding categorical data # Encoding the Independent Variable from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_X = LabelEncoder() X[:, 0] = labelencoder_X.fit_transform(X[:, 0]) #不包括index行 onehotencoder = OneHotEncoder(categorical_features = [0]) X = onehotencoder.fit_transform(X).toarray() # Encoding the Dependent Variable labelencoder_y = LabelEncoder() y = labelencoder_y.fit_transform(y)
在R语言中不须要特别将每一类别分为一列,这比Python要简单一些。由于每一列用vector来表示,因此能够接受不一样的大小。
# Encoding categorical data dataset$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))
当数据集准备完成以后,咱们须要将数据集进行分类,将独立变量和依赖变量分为训练集和测试集。训练集与测试集的比例通常是用4:1。
# Splitting the dataset into the Training set and Test set from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
# 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)
这是对数据处理的一项很重要的步骤,在机器学习中,因为每一个变量的范围不一样,若是两个变量之间差距太大,会致使距离对结果产生影响。因此咱们要对数据进行必定的标准化改变。最简单的方式是将数据缩放至[0.1]或者[-1,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)
# Feature Scaling training_set[, 2:3] = scale(training_set[, 2:3]) test_set[, 2:3] = scale(test_set[, 2:3])
以上就是几个基本的准备工做的步骤,咱们能够创建一个样板,对数据进行预处理,而后在进行机器学习,如下是Python和R的样板:
# Data Preprocessing template # Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd # Importing the dataset dataset = pd.read_csv('Data.csv') X = dataset.iloc[:, :-1].values y = dataset.iloc[:, 3].values # Splitting the dataset into the Training set and Test set from sklearn.cross_validation 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)
# Data Preprocessing template # Importing the dataset dataset = read.csv('Data.csv') # dataset = dataset[, 2:3] # 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) # Feature Scaling training_set[, 2:3] = scale(training_set[, 2:3]) test_set[, 2:3] = scale(test_set[, 2:3])
下面咱们就开始真正的机器学习啦!!