這是一個機器學習的系列,偏數據分析方向,將來或許會寫一些偏人工智能方向的機器學習的文章。這個系列將會詳細介紹經常使用的機器學習模型和算法,像是線性迴歸和分類算法。最後會介紹機器學習方向合適的一些可視化工具。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])
下面咱們就開始真正的機器學習啦!!