机器学习10种经典算法的Python实现

广义来说,有三种机器学习算法

1、 监督式学习

工作机制:这个算法由一个目标变量或结果变量(或因变量)组成。这些变量由已知的一系列预示变量(自变量)预测而来。利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。

2、非监督式学习

工作机制:在这个算法中,没有任何目标变量或结果变量要预测或估计。这个算法用在不同的组内聚类分析。这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。非监督式学习的例子有:关联算法和 K – 均值算法。

3、强化学习

工作原理:这种算法训练机器做出决策。它的工作原理是这样的:机器被放置在一个允许它通过试验和错误来训练自己的环境中。机器从过去的经验中学习,并试图使用最全面的知识做出准确的商业判断。强化学习的例子是马尔可夫决策过程。

[En]

How it works: this algorithm trains machines to make decisions. It works like this: the machine is placed in an environment that allows it to train itself through trial and error. Machines learn from past experience and try to make accurate business judgments using the most thorough knowledge. Examples of reinforcement learning are Markov decision-making processes.

常见机器学习算法名单

以下是常用的机器学习算法列表。这些算法几乎可以应用于所有数据问题:

[En]

Here is a list of commonly used machine learning algorithms. These algorithms can be applied to almost all data problems:

  1. 线性回归
  2. 逻辑回归
  3. 决策树
  4. SVM
  5. 朴素贝叶斯
  6. K最近邻算法
  7. K均值算法
  8. 随机森林算法
  9. 降维算法
  10. Gradient Boost 和 Adaboost 算法

1、线性回归

线性回归通常用于根据连续变量估计实际数值(房价、呼叫次数、总销售额等)。我们通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y= a *X + b 这条线性等式来表示。

理解线性回归的最好方法是回顾童年。假设一个五年级的学生被要求按照从轻到重的顺序给他的同学排名,而不问对方的体重。你认为这个孩子会做什么?他或她可能会目测人们的身高和身材,结合这些可见的参数来对他们进行排名。这是在现实生活中使用线性回归的一个例子。事实上,孩子发现了身高、体型和体重之间的关系,这看起来很像上面的等式。

[En]

The best way to understand linear regression is to look back on childhood. Suppose a fifth grader is asked to rank his classmates in the order from light to heavy without asking each other’s weight. What do you think the child will do? He or she is likely to visually measure people’s height and figure, combining these visible parameters to rank them. This is an example of using linear regression in real life. In fact, the child found a relationship between height and size and weight, which looks a lot like the equation above.

在这个方程式中:

[En]

In this equation:

  • Y:因变量
  • a:斜率
  • x:自变量
  • b :截距

系数 a 和 b 可以通过最小二乘法获得。

参见下例。我们找出最佳拟合直线 y=0.2811x+13.9 。已知人的身高,我们可以通过这条等式求出体重。

机器学习10种经典算法的Python实现

线性回归的两种主要类型是单变量线性回归和多元线性回归。一元线性回归的特点是只有一个自变量。多元线性回归的特点,顾名思义,自变量很多。在寻找最佳拟合线时,可以用多项式或曲线回归进行拟合。这些被称为多项式回归或曲线回归。

[En]

The two main types of linear regression are univariate linear regression and multivariate linear regression. The characteristic of univariate linear regression is that there is only one independent variable. The characteristic of multiple linear regression is just like its name, there are many independent variables. When looking for the best fitting line, you can fit to a multinomial or curve regression. These are called polynomial or curvilinear regression.

Python 代码

#Import Library
#Import other necessary libraries like pandas, numpy...

from sklearn import linear_model

#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train=input_variables_values_training_datasets
y_train=target_variables_values_training_datasets
x_test=input_variables_values_test_datasets

# Create linear regression object
linear = linear_model.LinearRegression()

# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)

#Equation coefficient and Intercept
print('Coefficient: n', linear.coef_)
print('Intercept: n', linear.intercept_)

#Predict Output
predicted= linear.predict(x_test)

2、逻辑回归

别被它的名字愚弄了!这是一种分类算法,而不是回归算法。该算法可以基于一系列已知的因变量(例如,二进制值0或1、是或否、真或假)来估计离散值。简单地说,它通过将数据拟合到逻辑函数中来估计事件的概率。因此,它也被称为逻辑回归。因为它预测概率,所以它的输出值介于0和1之间(正如预期的那样)。

[En]

Don’t be fooled by its name! This is a classification algorithm rather than a regression algorithm. The algorithm can estimate discrete values based on a series of known dependent variables (for example, binary values 0 or 1, yes or no, true or false). To put it simply, it estimates the probability of an event by fitting the data into a logical function. Therefore, it is also called logical regression. Because it predicts probability, its output value is between 0 and 1 (as expected).

让我们通过一个简单的例子来再次理解这个算法。

[En]

Let’s understand this algorithm again through a simple example.

假设你的朋友让你解一个谜语。只会有两个结果:你解开它,或者你不解开它。想象一下,你必须解决很多问题才能找到你擅长的话题。这项研究的结果将是这样的:如果问题是一道十年级的三角函数题,你有70%的机会解决它。然而,如果这是一道五年级的历史题,你只有30%的机会答对。这是逻辑回归可以为您提供的信息。

[En]

Suppose your friend asks you to solve a riddle. There will only be two results: you untie it or you don’t untie it. Imagine that you have to solve a lot of questions to find out the topics you are good at. The result of this study will look like this: if the problem is a tenth grade trigonometric function problem, there is a 70% chance that you will solve it. However, if the question is a fifth-grade history question, you have only a 30% chance of getting it right. This is the information that logical regression can provide you.

在数学上,在结果中,概率的对数使用了预测变量的线性组合模型。

[En]

Mathematically, in the results, the logarithm of probability uses a linear combination model of predictive variables.

odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence
ln(odds) = ln(p/(1-p))
logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

在上面的式子里,p 是我们感兴趣的特征出现的概率。它选用使观察样本值的可能性最大化的值作为参数,而不是通过计算误差平方和的最小值(就如一般的回归分析用到的一样)。

现在你可能会问,为什么我们要求对数?简而言之,这种方法是复制梯形函数的最佳方法之一。我本可以更详细地谈论它,但这与本指南的主旨背道而驰。

[En]

Now you may have to ask, why do we ask for logarithms? In short, this method is one of the best ways to copy a ladder function. I could have talked about it in more detail, but that would go against the gist of this guide.

机器学习10种经典算法的Python实现

Python代码

#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression()

# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)

#Equation coefficient and Intercept
print('Coefficient: n', model.coef_)
print('Intercept: n', model.intercept_)

#Predict Output
predicted= model.predict(x_test)

更进一步:

您可以尝试更多方法来改进此模型:

[En]

You can try more ways to improve this model:

  • 加入交互项
  • 精简模型特性
  • 使用正则化方法
    [En]

    use the regularization method*

  • 使用非线性模型
    [En]

    use a nonlinear model*

3、决策树

这是我最喜爱也是最频繁使用的算法之一。这个监督式学习算法通常被用于分类问题。令人惊奇的是,它同时适用于分类变量和连续因变量。在这个算法中,我们将总体分成两个或更多的同类群。这是根据最重要的属性或者自变量来分成尽可能不同的组别。想要知道更多,可以阅读:简化决策树

机器学习10种经典算法的Python实现

来源: statsexchange

在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。

理解决策树工作机制的最好方式是玩Jezzball,一个微软的经典游戏(见下图)。这个游戏的最终目的,是在一个可以移动墙壁的房间里,通过造墙来分割出没有小球的、尽量大的空间。

机器学习10种经典算法的Python实现

所以,每次你用一面墙来隔开一个房间,你就是在试图在同一个房间里创造两个不同的总数。同样,决策树将种群尽可能地划分为不同的组。

[En]

So every time you use a wall to separate a room, you are trying to create two different totals in the same room. Similarly, the decision tree is dividing the population into different groups as much as possible.

更多信息请见: 决策树算法的简化

Python代码

#Import Library
#Import other necessary libraries like pandas, numpy...

from sklearn import tree

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create tree object
model = tree.DecisionTreeClassifier(criterion='gini')
# for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini

# model = tree.DecisionTreeRegressor() for regression
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)

#Predict Output
predicted= model.predict(x_test)

4、支持向量机

这是一种分类方法。在这个算法中,我们将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。

例如,如果我们只有身高和头发长度,我们将在二维空间中标记这两个变量,每个点都有两个坐标(这些坐标称为支持向量)。

[En]

For example, if we only have height and hair length, we will mark these two variables in two-dimensional space, and each point has two coordinates (these coordinates are called support vectors).

机器学习10种经典算法的Python实现

现在,我们将找到一条直线来分隔两组不同的数据。同时优化了两组中最近的两点到这条线的距离。

[En]

Now, we will find a straight line that separates two different sets of data. The distance from the two nearest points to this line in the two groups is optimized at the same time.

机器学习10种经典算法的Python实现

上面示例中的黑线将数据分类优化成两个小组,两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。

更多请见: 支持向量机的简化

将这个算法想作是在一个 N 维空间玩 JezzBall。需要对游戏做一些小变动:

  • 不再水平或垂直绘制直线,现在可以以任何角度绘制直线或平面。
    [En]

    instead of drawing straight lines horizontally or vertically, you can now draw lines or planes at any angle.*

  • 游戏的目的是将不同颜色的球分成不同的空间。
    [En]

    the purpose of the game is to divide balls of different colors into different spaces.*

  • 球的位置不会改变。
    [En]

    the position of the ball will not change.*

Python代码

#Import Libraryfrom sklearn import svm#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create SVM classification objectmodel = svm.svc()# there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.# Train the model using the training sets and check scoremodel.fit(X, y)model.score(X, y)#Predict Outputpredicted= model.predict(x_test)

5、朴素贝叶斯

在预示变量间相互独立的前提下,根据 贝叶斯定理可以得到朴素贝叶斯这个分类方法。用更简单的话来说,一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关。举个例子,如果一个水果又圆又红 , 并且直径大约是 3 英寸,那么这个水果可能会是苹果。即便这些特性互相依赖 , 或者依赖于别的特性的存在,朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果。

朴素贝叶斯模型很容易构建,对于大型数据集非常有用。虽然简单,但朴素贝叶斯的性能超越了非常复杂的分类。

[En]

Naive Bayesian models are easy to build and are very useful for large data sets. Although simple, the performance of naive Bayes goes beyond the very complex classification.

贝叶斯定理提供了一种从P(c)、P(x)和P(x|c) 计算后验概率 P(c|x) 的方法。请看以下等式:

机器学习10种经典算法的Python实现

在这里,

  • P ( c|x ) 是已知预示变量(属性)的前提下,类(目标)的后验概率
  • P ( c ) 是类的先验概率
  • P ( x|c ) 是可能性,即已知类的前提下,预示变量的概率
  • P ( x ) 是预示变量的先验概率

例子:让我们用一个例子来理解这个概念。在下面,我有一个天气的训练集和对应的目标变量”Play”。现在,我们需要根据天气情况,将会”玩”和”不玩”的参与者进行分类。让我们执行以下步骤。

步骤1:把数据集转换成频率表。

步骤2:利用类似”当Overcast可能性为0.29时,玩耍的可能性为0.64″这样的概率,创造 Likelihood 表格。

机器学习10种经典算法的Python实现

步骤3:现在,使用朴素贝叶斯等式来计算每一类的后验概率。后验概率最大的类就是预测的结果。

问题:如果天气晴朗,参赛者可以玩。这个说法正确吗?

[En]

Problem: if the weather is clear, participants can play. Is this statement correct?

我们可以使用讨论过的方法解决这个问题。于是 P(会玩 | 晴朗)= P(晴朗 | 会玩)* P(会玩)/ P (晴朗)

我们有 P (晴朗 |会玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(会玩)= 9/14 = 0.64

现在,P(会玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60,有更大的概率。

朴素贝叶斯使用类似的方法,通过不同的属性来预测不同类别的概率。该算法通常用于文本分类,以及涉及多类的问题。

[En]

Naive Bayes uses a similar method to predict the probabilities of different categories through different attributes. This algorithm is usually used for text classification, as well as problems involving multiple classes.

Python代码

#Import Library
from sklearn.naive_bayes import GaussianNB

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
# Train the model using the training sets and check score
model.fit(X, y)

#Predict Output
predicted= model.predict(x_test)

6、KNN(K – 最近邻算法)

该算法可用于分类问题和回归问题。然而,在业界内,K – 最近邻算法更常用于分类问题。K – 最近邻算法是一个简单的算法。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去。

这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离。前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量。如果 K=1,新案例就直接被分到离其最近的案例所属的类别中。有时候,使用 KNN 建模时,选择 K 的取值是一个挑战。

更多信息:K – 最近邻算法入门(简化版)

机器学习10种经典算法的Python实现

我们可以很容易地在现实生活中应用到 KNN。如果想要了解一个完全陌生的人,你也许想要去找他的好朋友们或者他的圈子来获得他的信息。

在选择使用 KNN 之前,你需要考虑的事情:

  • KNN 的计算成本很高。
  • 变量应该先标准化(normalized),不然会被更高范围的变量偏倚。
  • 在使用KNN之前,要在野值去除和噪音去除等前期处理多花功夫。

Python代码

#Import Library
from sklearn.neighbors import KNeighborsClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create KNeighbors classifier object model
KNeighborsClassifier(n_neighbors=6)
# default value for n_neighbors is 5

# Train the model using the training sets and check score
model.fit(X, y)

#Predict Output
predicted= model.predict(x_test)

7、K 均值算法

K – 均值算法是一种非监督式学习算法,它能解决聚类问题。使用 K – 均值算法来将一个数据归入一定数量的集群(假设有 k 个集群)的过程是简单的。一个集群内的数据点是均匀齐次的,并且异于别的集群。

还记得从墨水渍里找出形状的活动吗?K – 均值算法在某方面类似于这个活动。观察形状,并延伸想象来找出到底有多少种集群或者总体。

机器学习10种经典算法的Python实现

K – 均值算法怎样形成集群:

  1. K – 均值算法给每个集群选择k个点。这些点称作为质心。
  2. 每一个数据点与距离最近的质心形成一个集群,也就是 k 个集群。
  3. 根据现有的类别成员,找出每个类别的质心。现在我们有了新质心。
  4. 当我们有新质心后,重复步骤 2 和步骤 3。找到距离每个数据点最近的质心,并与新的k集群联系起来。重复这个过程,直到数据都收敛了,也就是当质心不再改变。

如何决定 K 值:

K – 均值算法涉及到集群,每个集群有自己的质心。一个集群内的质心和各数据点之间距离的平方和形成了这个集群的平方值之和。同时,当所有集群的平方值之和加起来的时候,就组成了集群方案的平方值之和。

我们知道,当集群的数量增加时,K值会持续下降。但是,如果你将结果用图表来表示,你会看到距离的平方总和快速减少。到某个值 k 之后,减少的速度就大大下降了。在此,我们可以找到集群数量的最优值。

机器学习10种经典算法的Python实现

Python代码

#Import Library
from sklearn.cluster import KMeans

#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
# Create KNeighbors classifier object model
k_means = KMeans(n_clusters=3, random_state=0)

# Train the model using the training sets and check score
model.fit(X)

#Predict Output
predicted= model.predict(x_test)

8、随机森林

随机森林是整个决策树的专有名词。在随机森林算法中,我们有一系列的决策树(因此而得名“森林”)。为了根据新对象的属性对其进行分类,每个决策树都有一个分类,该分类称为决策树对该分类的投票。这个森林选择在森林中获得最多选票的类别(在所有树中)。

[En]

Random forest is a proper noun for the whole of decision tree. In the random forest algorithm, we have a series of decision trees (hence the name “forest”). In order to classify a new object according to its attributes, each decision tree has a classification, which is called the decision tree “vote” for that classification. This forest chooses the category that gets the most votes in the forest (of all the trees).

每棵树都是这样种植的:

[En]

Every tree is planted like this:

  1. 如果训练集的案例数是 N,则从 N 个案例中用重置抽样法随机抽取样本。这个样本将作为”养育”树的训练集。
  2. 假如有 M 个输入变量,则定义一个数字 m<

要了解有关此算法的更多信息、比较决策树并优化模型参数,我建议您阅读以下文章:

[En]

To learn more about this algorithm, compare decision trees, and optimize model parameters, I suggest you read the following articles:

  1. 随机森林入门—简化版
  2. 将 CART 模型与随机森林比较(上)
  3. 将随机森林与 CART 模型比较(下)
  4. 调整你的随机森林模型参数

Python

#Import Library
from sklearn.ensemble import RandomForestClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier()

# Train the model using the training sets and check score
model.fit(X, y)

#Predict Output
predicted= model.predict(x_test)

9、降维算法

在过去的 4 到 5 年里,在每一个可能的阶段,信息捕捉都呈指数增长。公司、政府机构、研究组织在应对着新资源以外,还捕捉详尽的信息。

比如:电商更详细地捕捉顾客信息:个人信息、上网浏览历史、顾客好恶、购买记录、反馈等诸多信息,比身边的杂货店售货员更关注你。

[En]

For example: e-commerce companies capture information about customers in more detail: personal information, Internet browsing history, their likes and dislikes, purchase records, feedback, and many other information, paying more attention to you than the grocery store salesperson around you.

作为一个数据科学家,我们提供的数据包含许多特点。这听起来给建立一个经得起考研的模型提供了很好材料,但有一个挑战:如何从 1000 或者 2000 里分辨出最重要的变量呢?在这种情况下,降维算法和别的一些算法(比如决策树、随机森林、PCA、因子分析)帮助我们根据相关矩阵,缺失的值的比例和别的要素来找出这些重要变量。

想要知道更多关于该算法的信息,可以阅读 《降维算法的初学者指南》

Python代码

#Import Library
from sklearn import decomposition

#Assumed you have training and test data set as train and test
# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)
# For Factor analysis
#fa= decomposition.FactorAnalysis()
# Reduced the dimension of training dataset using PCA
train_reduced = pca.fit_transform(train)

#Reduced the dimension of test dataset
test_reduced = pca.transform(test)

#For more detail on this, please refer  this link.

10、Gradient Boosting 和 AdaBoost 算法

当我们要处理很多数据来做一个有高预测能力的预测时,我们会用到 GBM 和 AdaBoost 这两种 boosting 算法。boosting 算法是一种集成学习算法。它结合了建立在多个基础估计值基础上的预测结果,来增进单个估计值的可靠程度。这些 boosting 算法通常在数据科学比赛如 Kaggl、AV Hackathon、CrowdAnalytix 中很有效。

更多: 详尽了解 Gradient 和 AdaBoost

Python代码

#Import Library
from sklearn.ensemble import GradientBoostingClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Gradient Boosting Classifier object
model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

# Train the model using the training sets and check score
model.fit(X, y)

#Predict Output
predicted= model.predict(x_test)

GradientBoostingClassifier 和随机森林是两种不同的 boosting 树分类器。人们常常问起这两个算法之间的区别。

Original: https://www.cnblogs.com/Anita9002/p/11219577.html
Author: Anita-ff
Title: 机器学习10种经典算法的Python实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7592/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总