逻辑斯蒂回归(Logistic Regression)虽然被称为回归,但其实际上是分类模型,常用于二分类。LR模型因其简单好实现、可解释强深受工业界喜爱。
在机器学习领域,我们听到的更多是损失函数的概念,常通过构建损失函数,然后最小化损失函数求得目标参数。LR的本质是:假设数据服从这个分布,対生成的结果是0或1的概率进行建模,通过采用最大似然估计的方法最大化似然函数,采用梯度上升的方法得到使似然函数最大的参数。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 导入数据
data = pd.read_csv('data.txt', header=None, sep='\t')
x = data.iloc[:, :-1]
y = data.iloc[:, -1]
# 切分训练集、测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)
# 数据标准化
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)
# 建模
lr = LogisticRegression(penalty='l2',
tol=0.01,
C=1.0,
solver='liblinear',
max_iter=100,
random_state=1)
# 模型训练
lr.fit(x_train, y_train)
# 模型评估
y_predict = lr.predict(x_test)
acc = lr.score(x_test, y_test)
print(acc)
算法参数如下:
k近邻(K-Nearest Neighbor,简称KNN)是一种常用的监督学习算法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5,
weights='distance')
# 模型训练
knn.fit(x_train, y_train)
# 模型评估
y_predict = knn.predict(x_test)
acc = knn.score(x_test, y_test)
print(acc)
模型参数如下:
朴素贝叶斯分类是一种十分简单的分类算法,说它十分简单是因为它的解决思路非常简单。即对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。举个形象的例子,若我们走在街上看到一个黑皮肤的外国友人,让你来猜这位外国友人来自哪里。十有八九你会猜是从非洲来的,因为黑皮肤人种中非洲人的占比最多,虽然黑皮肤的外国人也有可能是美洲人或者是亚洲人。但是在没有其它可用信息帮助我们判断的情况下,我们会选择可能出现的概率最高的类别,这就是朴素贝叶斯的基本思想。
相关定理及概念如下:
from sklearn.naive_bayes import GaussianNB, BernoulliNB, MultinomialNB
bayes = GaussianNB()
bayes.fit(x_train, y_train)
# class_prior_ :获取各个类的先验概率
print(bayes.class_prior_)
y_predict = bayes.predict(x_test)
y_predict_proba = bayes.predict_proba(x_test)
acc = bayes.score(x_test, y_test)
print(acc)
模型参数如下:
Svm(support Vector Mac)又称为支持向量机,是一种二分类的模型。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使得本本集中所有数据到这个超平面的距离最短。
from sklearn import svm
svc = svm.SVC(C=1.0,
cache_size=200,
class_weight=None,
coef0=0.0,
degree=3,
gamma='auto',
kernel='rbf',
max_iter=-1,
probability=False,
random_state=None,
shrinking=True,
tol=0.001,
verbose=False)
svc.fit(x_train, y_train)
# 分类结果
y_predict = svc.predict(x_test)
acc = svc.score(x_test, y_test)
print(acc)
模型参数如下:
决策树就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果,而树的每一个叶子节点代表一个类别。树的最高层是就是根节点。
决策树是机器学习中很经典的一个算法,可用于分类和回归。一棵决策树的生成过程主要分为以下3个部分:
ID3算法是最早提出的一种决策树算法,ID3算法的核心是在决策树各个节点上应用信息增益准则来选择特征,递归的构建决策树。具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点:再对子节点递归的调用以上方法,构建决策树:直到所有的特征信息增益均很小或没有特征可以选择为止。
ID3算法缺点:
C4.5算法与ID3算法决策树的生成过程相似,C4.5算法对ID3算法进行了改进,它是用信息增益比来选择特征。
CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,CART算法既可以用于分类还可以用于回归。当CART是分类树的时候,采用GINI值作为分裂节点的依据,当CART作为回归树的时候,使用样本的最小方差作为分裂节点的依据。
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 |
---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益比 | 支持 | 支持 | 支持 |
CART | 分类,回归 | 二叉树 | 基尼系数,均方差 | 支持 | 支持 | 支持 |
from sklearn import tree
# 分类树
tree = tree.DecisionTreeClassifier(criterion='entropy',
max_depth=3,
min_samples_leaf=5)
tree.fit(x_train, y_train)
# 决策树中的类数量
tree_num = tree.n_classes_
# feature的重要性,值越大那么越重要
feature_score = tree.feature_importances_
y_predict = tree.predict(x_test)
y_predict_proba = tree.predict_proba(x_test)
acc = tree.score(x_test, y_test)
print(acc)
模型参数如下:
以上梳理了机器学习中最经典、最简单的5个算法,后续在机器学习-算法篇(下)还会介绍到随机森林、ADaBoost、GBDT、XGBoost、LightGBM等机器学习算法,写得不是很好,欢迎大家指导😉
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。