機器學習(一):入門

這是一個機器學習的系列,偏數據分析方向,將來或許會寫一些偏人工智能方向的機器學習的文章。這個系列將會詳細介紹經常使用的機器學習模型和算法,像是線性迴歸和分類算法。最後會介紹機器學習方向合適的一些可視化工具。python

我是程序員出身,這個系列中全部的代碼我會用Python和R語言同時演示,可是算法的內部邏輯運算我也會用Java或者Python演示。也就是說從這個系列中你不只僅能夠學會如何使用Python和R進行機器學習,也能夠用習慣的編程語言編寫本身的機器學習庫。程序員

如今就讓咱們進入機器學習的世界吧!算法

這一節主要進行機器學習的入門。內容比較基礎。編程

編程環境的話依我的喜愛而定,我也不會推薦任何IDE,可是我會貼出代碼。dom

得到數據集(get the dataset)

在作機器學習以前須要有結構化的數據(structure data)才行。網上有不少網站能夠提供這些數據。我也會給你們提供一些簡單的數據集。機器學習

首先咱們使用一個簡單的數據集。每個數據集都會包括兩部分,獨立變量(independent variable)和依賴變量(dependent variable)。機器學習的目的就是須要經過獨立變量來預測非獨立變量(prediction)。
獨立變量不會被影響而非獨立變量可能被獨立變量影響。編程語言

在如下數據集中Age和Salary就是獨立變量,咱們須要經過這兩個獨立變量預測是否會Purchase。因此Purchased就是非獨立變量。工具

1.PNG

導入數據科學庫(importing the library)

下面咱們要準備Python的編程環境,在Python中有不少數據科學的庫(見個人Data Scienc系列),咱們須要的主要是如下三個庫:學習

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

導入數據集(importing dataset)

在導入數據以前你須要設置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)

處理空數據(Missing Data)

在數據集中可能會出現爲空的數據,咱們不能刪除有空數據的列,這樣會對咱們機器學習的結果形成影響,在data science中咱們能夠用NaN代替空值,可是在ML中必需要求數據爲numeric。因此咱們能夠用mean來代替空值。

原數據集如圖:
2.PNG

代碼以下:

# 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 應用到數據

結果以下圖所示:
3.PNG

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)

4.PNG

分類數據(category data)

在對數據集進行處理時候咱們會遇到一些包含同類別的數據(如圖二中的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)

5.PNG
在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))

6.PNG

將數據集分類

當數據集準備完成以後,咱們須要將數據集進行分類,將獨立變量和依賴變量分爲訓練集和測試集。訓練集與測試集的比例通常是用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)

特徵縮放(feature scaling)

這是對數據處理的一項很重要的步驟,在機器學習中,因爲每一個變量的範圍不一樣,若是兩個變量之間差距太大,會致使距離對結果產生影響。因此咱們要對數據進行必定的標準化改變。最簡單的方式是將數據縮放至[0.1]或者[-1,1]之間:
7.PNG

# 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])

8.PNG

創建模板

以上就是幾個基本的準備工做的步驟,咱們能夠創建一個樣板,對數據進行預處理,而後在進行機器學習,如下是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])

下面咱們就開始真正的機器學習啦!!

相關文章
相關標籤/搜索