逼疯懒癌:“机器学习100天大作战”正式开端!

来源:搜了么SouLeMo 2020年09月03日 09:45

机器学习现已成为人工智能中开展最快,运用最广、最重要的分支之一。可是这条学习之路好像并不是那么简略,也不总是一往无前的。

信任每一个学习机器学习的小伙伴都码过不少的学习资源,无论是在线课程仍是大佬们收拾的学习PPT,可是看的速度远不及码的速度;有的同学数学根底比较差,就想先把数学补足再学习,可是往往数学也没补上来,机器学习还没开端就现已抛弃了;还有许多同学看到现在深度学习气势最盛,直接学习深度学习,成果发现学习到的内容也像海市蜃楼,不厚实。

无论是数学知识、经典与重要的算法仍是编码实践,每天都会有人在路上败下阵来而抛弃学习,似乎咱们永久都停留在入门阶段。

其实机器学习包含的知识面十分多,并且不只要学习理论还有实践相同不能忽视。假如根底薄弱,学习起来肯定是会遇到许多困难的,但就必定不行吗?如安在根底薄弱的条件下进行有用的学习是许多人都十分关怀的。至此 AI 科技大本营特此依据作者 Avik-Hain 的博客为咱们精心预备了“机器学习百天大作战”的系列学习方案与教程,从理论与实践结合,在100天左右的时间里从理论+实践结合的办法,有条理有逻辑的协助咱们完结入门,助攻进阶。信任咱们必定可以获益颇多!

本期内容是此系列的第一期,首要内容有:

数据处理的实践流程

简略的线性回归与完成

多元线性回归与实践

Logistic 回归及实践

支撑向量机 SVM 及其完成

KNN 算法与完成

决议计划树模型与完成

Day 1

数据处理

机器学习中的数据处理实践流程首要如下:

第一步:导入所需的库。Numpy 和 Pandas 是两个必需的,也是最基本的数据处理库。

import numpy as npimport pandas as pd

第二步:导入数据集。数据集一般是 .csv 的格局。一个 csv 文件可以贮存表格数据,每行都代表一条数据,咱们可以运用 Pandas 中的 read_csv 办法来读取 csv 文件并将其作为 dataframe 处理。随后,咱们可以将 dataframe 中的矩阵、向量和标量别脱离来独自处理。

dataset = pd.read_csv('Data.csv')X = dataset.iloc[ : , :-1].valuesY = dataset.iloc[ : , 3].values

第三步:处理缺失数据。数据一般会由于一些原因而缺失,咱们需求对其进行处理以便其不会对机器学习模型的功能形成影响。咱们可以经过对整列数据进行均匀化或中值化来添补缺失数据,这可以经过 sklearn.preprocessing 中的 Imputer 类办法来处理这个问题。

from sklearn.preprocessing import Imputerimputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)imputer = imputer.fit(X[ : , 1:3])X[ : , 1:3] = imputer.transform(X[ : , 1:3])

第四步:编码类数据。类数据是一个包含标签值的变量,一般它们被约束在一个固定的调会集。例如,‘Yes’ 或 ‘No’ 是无法用于模型中的数学表达式,因而咱们需求对这些类数据进行编码,将其转化为数值。咱们可以经过 sklearn.preprocessing 中的 LabelEncoder 类办法来处理这个问题。

from sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder_X = LabelEncoder()X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])

第五步:将数据集别离为练习集和测验集。在机器学习中,咱们一般需求对源数据集进行处理,以便别离出练习集和测验集,别离用于模型的练习和测验。一般所运用的别离比为8:2,咱们可以经过导入 sklearn.crossvalidation 库的 train_test_split() 办法来处理这个问题。

from sklearn.cross_validation import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

第六步:特征缩放。大多数机器学习算法会选用欧式间隔,来衡量两个数据点特征改变状况。比较于低量级的特征,高量级的特征会在间隔核算中占更大的权重。可以经过特征标准化或 Z 分数正则化来处理,咱们可以导入 sklearn.preprocessing 库的 StandardScalar 办法。

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

Day 2

简略的线性回归

▌简略的线性回归模型

运用单个特征来猜测成果。在这种回归模型中,咱们测验最小化猜测值和实在值之间的丢失,来得到最佳的拟合功能。

▌线性回归的完成

第一步:数据预处理。回归模型中的数据预处理进程遵从上述的数据处理流程,首要包含导入所需的库,导入所需的数据集,查看缺失数据,别离数据集以及特征缩放。

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltdataset = pd.read_csv('studentscores.csv')X = dataset.iloc[ : , : 1 ].valuesY = dataset.iloc[ : , 1 ].valuesfrom sklearn.cross_validation import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)

第二步:用练习数据拟合简略的线性回归模型。首要,咱们导入 sklearn.linear_model 中的 LinearRegression 类。然后,咱们为方针 regressor 创立一个 LinearRegression 类。现在,咱们可以运用 LinearRegression 类的 fit() 办法来用练习数据去拟合咱们的方针 regressor。

from sklearn.linear_model import LinearRegressionregressor = LinearRegression()regressor = regressor.fit(X_train, Y_train)

第三步:猜测成果。运用咱们练习好的模型,在测验集上猜测咱们的成果。首要,咱们为猜测成果创立一个向量 Y-pred。然后,咱们对练习好的 regressor 运用 LinearRegression 类的猜测办法来进行猜测。

Y_pred = regressor.predict(X_test)

第四步:可视化。终究一步是可视化终究的成果,咱们可以选用 matplotlib.pyplot 库来为模型的练习成果和测验成果做出散点图,可视化模型的猜测成果。

plt.scatter(X_train , Y_train, color = 'red')plt.plot(X_train , regressor.predict(X_train), color ='blue')

plt.scatter(X_test , Y_test, color = 'red')plt.plot(X_test , regressor.predict(X_test), color ='blue')

Day 3

多元线性回归

▌多元线性回归模型

旨在经过拟合一个线性等式,探求两个或多个特征变量之间的联系。多元线性回归的处理进程与简略线性回归的流程大致类似,不同就在于模型评价处理。由于多个变量对终究猜测成果的影响是不同的,因而咱们可以进一步评价对模型影响最大的变量以及各变量之间的相互联系。一个好的多元线性回归模型需求满意以下几个条件:

线性:不论是独立仍是非独立的变量,它们之间的联系都应该是线性的。

方差齐性 (Homoscedasticity):常量间差错要一直存在。

多元正态性 (Multivariate Normality):多元回归假定变量之间的残差遵守正态分布。

缺少多重性 (Lack of Multicollinearity):这儿假定数据间不存在多重性。只有当特征或变量之间独立时才存在多重性。

此外,多元回归模型中运用的类数据是处理非数值数据类型十分有用的手法。类数据一般触及一些表明类别数值的数据,如性别(男/女)。在回归模型中,这些数值一般可以被表明为哑变量,即用1或0代表类别数据呈现或不呈现。此外,关于两个类数据之间存在相关性的问题,咱们一般下降一个类别数量,以便正常运用回归模型。

▌深化多元线性回归

第一步:数据预处理

导入库、导入数据集、编码分类数据、别离数据为练习集和测验集

import pandas as pdimport numpy as npdataset = pd.read_csv('50_Startups.csv')X = dataset.iloc[ : , :-1].valuesY = dataset.iloc[ : , 4 ].valuesfrom sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder = LabelEncoder()X[: , 3] = labelencoder.fit_transform(X[ : , 3])onehotencoder = OneHotEncoder(categorical_features = [3])X = onehotencoder.fit_transform(X).toarray()X = X[: , 1:]from sklearn.cross_validation import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)

第二步:将多个线性回归拟合到练习集

from sklearn.linear_model import LinearRegressionregressor = LinearRegression()regressor.fit(X_train, Y_train)

第三步:猜测测验集成果

y_pred = regressor.predict(X_test)

Day 4、5、6

Logistic 回归与深化实践

这部分将深化研究 Logistic 回归模型,包含它背面的数学原理,怎么核算本钱函数,以及怎么将梯度下降算法运用于本钱函数以最小化猜测差错等内容。

▌Logistic 回归

Logistic 回归一般用于不同类别的分类问题,旨在经过调查现有方针类猜测所属的类别。一般所给的是离散的二值数据,介于0和1之间。Logistic 回归最常见的比如是在推举期间民众的投票状况。

Logistic 回归模型选用潜在的 logistic 函数得到估量概率值,来衡量独立变量 (一般使咱们要猜测的标签值) 与一个或多个非独立变量 (咱们的特征值) 之间的联系。Logistic 函数,也被称为 sigmoid 函数,这是一个 S 型曲线函数,它可以将估量的概率值转换为二进制值0或1,以便模型猜测得到成果。

与线性回归模型得到接连型输出不同,Logistic 回归终究的成果是离散的。

▌深化 Logistic 回归实战

下面我以一个实例来详细阐明整个 Logistic 回归的流程。

交际网络数据集,这是一个包含交际网络用户信息的数据集,其间用户信息包含用户 ID,性别,年纪和估量薪酬等状况。一家汽车公司刚推出一款全新的奢华 SUV 骑车。咱们的使命是企图猜测交际网络中哪些用户将有才能购买这款全新的 SUV。终究一列的数据代表用户是否购买了这款 SUV (1代表购买,0代表不购买)。这儿,咱们计划构建一个 Logistic 回归模型,并把年纪和估量薪酬两列作为咱们的特征矩阵。咱们期望找到年纪和用户估量薪酬,与用户是否购买 SUV 决议之间的相关性。

第一步:数据预处理

导入所需的依靠库

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd

导入所需的数据库

dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values

数据库地址:

https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/datasets/Social_Network_Ads.csv

第二步:将数据库别离为练习库和测验库

from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

第三步:特征缩放

from sklearn.preprocessing import StandardScalersc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)

第四步:Logistic 回归模型

咱们选用一个线性模型库,由于 Logistic 回归自身就是一个线性分类器,这意味着,咱们将用一条直线在两个维度把两类用户分隔,然后导入 logistic 回归类。 接下来,咱们将从这个类中创立一个新方针,并作为咱们的练习数据会集的分类器。

在练习会集拟合 logistic 回归模型

from sklearn.linear_model import LogisticRegressionclassifier = LogisticRegression()classifier.fit(X_train, y_train)

第五步:猜测

用测验集数据猜测成果

y_pred = classifier.predict(X_test)

第六步:评价猜测成果

咱们将经过可视化混杂矩阵评价 logistic 回归模型的猜测成果。混杂矩阵可以显现咱们模型所做出的正确猜测以及不正确的猜测。

创立混杂矩阵

from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)

第七步:可视化成果

Day 7、8、9

支撑向量机 SVM及算法完成

这部分学习将带你直观了解 SVM 是什么,以及怎么运用它来处理分类问题。

▌SVM 算法的完成

支撑向量机 (SVM) 是一种监督式的机器学习算法,可以用于回归和分类使命 (大多数状况)。它经过找寻一个分类超平面来别离两个类别,换句话说,得到的最优超平面可以进一步用于新样本的分类。最优超平面是可以最大化类别数据之间间隔的那个平面,换而言之,每个类别间隔最优超平面的点之间的间隔是最大的。SVM 算法示意图如下:

关于 SVM 算法而言,有四个至关重要的超参数:

核巨细 (Kernel):线性 SVM 中超平面是经过线性代数改换得到的,因而核巨细扮演着要害的人物。多项式核和指数型核都能用于更高维度的线性别离核算。

正则化参数 (Regularization):当正则化参数过大时,SVM 的优化进程将挑选一个小边距的超平面,相反一个十分小的正则化参数将导致优化进程查找一个大边距的别离面。

GAMMA 参数:小的 gamma 参数意味着远离可能超平面的点在核算别离线时会被考虑,相反大的 gamma 参数意味着接近超平面的这些点在核算时会被考虑。

边距 (Margin):边距是别离线与最近类别数据点的间隔。一个好的边距可以将相应类别的数据点别脱离,而中心不会呈现其他类别的数据。

▌SVM 算法的完成

下面以一个实例来详细阐明

第一步:数据预处理

导入所需的库

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd

导入所需的数据数据集

dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values

第二步:将数据库别离为练习库和测验库

from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

第三步:特征缩放

from sklearn.preprocessing import StandardScalersc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)

第四步:在练习会集拟合 SVM 算法

from sklearn.svm import SVCclassifier = SVC(kernel = 'linear', random_state = 0)classifier.fit(X_train, y_train)

第五步:用测验集数据猜测成果

y_pred = classifier.predict(X_test)

第六步:创立混杂矩阵

from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)

第七步:可视化练习成果

from matplotlib.colors import ListedColormapX_set, y_set = X_train, y_trainX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j)plt.title('SVM (Training set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

第八步:可视化测验成果

from matplotlib.colors import ListedColormapX_set, y_set = X_test, y_testX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j)plt.title('SVM (Test set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

Day 10、11、12

K 最近邻算法 (KNN)与算法完成

经过这部分学习,你将学会怎么完成一个 KNN 算法。

▌KNN 算法

K 最近邻算法 (KNN) 是一种简略的回归分类模型,旨在经过非参数化的监督式学习来练习样本实例的算法。它不依靠于任何的数据分布假定,也不需求经过学习模型来猜测成果。在分类使命中,KNN 算法有三个要害要素:标签方针调集,方针间的间隔以及最近邻 k 的个数。

关于无标签的方针,KNN 算法会先核算它与标签方针之间的间隔,并断定其 k 个最近邻数。然后,经过最近邻方针的类别标签来断定该方针的类别。关于实值的输入变量,最常用的间隔衡量是欧式间隔。

欧式间隔是经过核算两个方针各特点值之间的平方和得到的。还有其他的间隔衡量包含:Hamming 间隔,Manhattan 间隔,Minkowski 间隔等。

K 值得选取:发现最佳的 K 值不是件简略的事。K 值越少,则对成果的影响越大;而 K 值越大,则核算本钱将越高。K 值得选取一般取决于你发样本量,有时候你需求测验一些可能的 K 值来得到最佳的挑选。

▌KNN算法的完成

下面以一个实例来详细阐明

第一步:导入库

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd

导入数据集

dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values

第二步:将数据集别离为练习集和测验集

from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

第三步:特征缩放

from sklearn.preprocessing import StandardScalersc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)

第四步:在练习会集拟合 KNN 算法

from sklearn.neighbors import KNeighborsClassifierclassifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)classifier.fit(X_train, y_train)

第五步:猜测测验集成果

y_pred = classifier.predict(X_test)

第六步:混杂矩阵

from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)

Day 13、14、15

决议计划树模型

▌决议计划树模型

决议计划树模型是一类用于类别和接连输入输出变量分类问题的监督式学习算法。一个决议计划树模型有许多分支,每个分支节点都代表一种挑选,每个叶子 (leaf) 节点都代表一种决议计划。下面咱们来看看决议计划树模型是怎么作业的:

在下图的高维空间,咱们有许多个分布的数据点,咱们将选用决议计划树模型将这些数据别脱离。

首要咱们将每种类别的数据别脱离,并构建一个决议计划树模型,便利后续运用。

经过比如 CART,ID3等决议计划树算法,咱们构建的决议计划树模型如下,这可以用于后续的输出猜测。

ID3 表明的是迭代的 Dichotomizer 3 算法,旨在给定树节点的每个特点数据,经过自上而下的贪婪查找来构建一个决议计划树模型。假定 A 是最佳特点,则分配一个决议计划树节点给 A。然后,对每个 A 值,为其创立一个子节点,直到遍历一切的练习数据。假如创立的决议计划树模型可以完美地分类数据,则停止上述进程,不然持续迭代每个叶节点。

▌决议计划树模型的完成

下面以一个实例来详细阐明

第一步:导入库

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd

导入数据集

dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values

第二步:将数据别离为练习集和测验集

from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

第三步:特征缩放

from sklearn.preprocessing import StandardScalersc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)

第四步:将决议计划树分类拟合到练习集

from sklearn.tree import DecisionTreeClassifierclassifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0)classifier.fit(X_train, y_train)

第五步:猜测测验集成果

y_pred = classifier.predict(X_test)

第六步:混杂矩阵

from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)

第七步:可视化练习集成果

from matplotlib.colors import ListedColormapX_set, y_set = X_train, y_trainX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j)plt.title('Decision Tree Classification (Training set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

第八步:可视化测验集成果

from matplotlib.colors import ListedColormapX_set, y_set = X_test, y_testX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j)plt.title('Decision Tree Classification (Test set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

预享信息科技:本文转至AI科技大本营

相关推荐
最新文章