首页 > 编程知识 正文

机器学习算法论文,机器学习分类算法

时间:2023-05-06 03:51:53 阅读:217499 作者:971

一、常见算法分类 分类方法
KNN逻辑斯蒂回归(logiscic)决策树朴素贝叶斯支持向量机SVC from sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.naive_bayes import GaussianNBfrom sklearn.svm import SVC 回归方法
KNN普通线性回归(linear)岭回归(ridge)lasso回归决策树支持向量机SVR from sklearn.neighbors import KNeighborsRegressorfrom sklearn.linear_model import LinearRegressionfrom sklearn.linear_model import Ridgefrom sklearn.linear_model import Lassofrom sklearn.tree import DecisionTreeRegressorfrom sklearn.svm import SVR 聚类方法
K均值算法(K-means) (无监督学习) from sklearn.cluster import KMeans 二、算法说明 1.KNN算法

kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。是从训练集中找到和新数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。

该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。

优点

简单,易于理解,易于实现,无需估计参数,无需训练

适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)

特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM的表现要好

缺点

懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢

可解释性较差,无法给出决策树那样的规则。

更多KNN算法理解

使用 #1.导入:分类问题:from sklearn.neighbors import KNeighborsClassifier回归问题:from sklearn.neighbors import KNeighborsRegressor#2.创建模型knnclf = KNeighborsClassifier(n_neighbors=5)knnrgr = KNeighborsRegressor(n_neighbors=3)#3.训练knnclf.fit(X_train,y_train)#4.预测y_pre = knnclf.predict(x_test) 练习案例
分类:处理鸢尾花数据、人类动作识别、预测年收入、手写数字识别回归:人脸补全 2.普通线性回归:linear

线性回归由两个词组成的:线性和回归。线性用来描述变量X(variable 或predictor或feature)的系数与响应Y(response)之间的关系是线性的。回归说明它的响应是定量(quantitative)的,而不是定性(qualitative)的。

使用 #1.导入from sklearn.linear_model import LinearRegression#2.创建模型line = LinearRegression()#3.训练line.fit(X_train,y_train)#4.预测y_pre= line.predict(x_test) 案例:
波士顿房价预测预测鲍鱼年龄人脸补全 3.岭回归:ridge 定义

岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最zjdxf乘估计法,通过放弃最zjdxf乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最zjdxf乘法。


岭回归是加了二阶正则项的最zjdxf乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候,岭回归是有bias的,这里的bias是为了让variance更小

归纳总结

1.岭回归可以解决特征数量比样本量多的问题
2.岭回归作为一种缩减算法可以判断哪些特征重要或者不重要,有点类似于降维的效果
3.缩减算法可以看作是对一个模型增加偏差的同时减少方差

岭回归用于处理下面两类问题:

1.数据点少于变量个数
2.变量间存在共线性(最zjdxf乘回归得到的系数不稳定,方差很大)

使用 #1.导入from sklearn.linear_model import Ridge#2.创建模型# alpha就是缩减系数lambda# 如果把alpha设置为0,就是普通线性回归ridge = Ridge(alpha=0)#3.训练#4.预测 4.lasso回归

说明

该方法是一种压缩估计。它通过构造一个罚函数得到一个较为精炼的模型,使得它压缩一些系数,同时设定一些系数为零。因此保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

使用

#1.导入from sklearn.linear_model import Lasso#2.创建模型las = Lasso(alpha=0.0001)#3.训练#4.预测 案例
波士顿房价预测预测鲍鱼年龄人脸补全 5.逻辑斯蒂回归:logistic 说明

利用Logistics回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。

训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。接下来介绍这个二值型输出分类器的数学原理

Logistic Regression和Linear Regression的原理是相似的,可以简单的描述为这样的过程:

(1)找一个合适的预测函数,一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。

(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。

(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有梯度下降法(Gradient Descent)。

使用 #1.导入from sklearn.linear_model import LogisticRegression#2.创建模型logistic = LogisticRegression(solver='lbfgs')#solver参数的选择:“liblinear”:小数量级的数据集“lbfgs”, “sag” or “newton-cg”:大数量级的数据集以及多分类问题“sag”:极大的数据集#3.训练#4.预测

案例

手写数字集分类make_blobs聚类数据进行分类预测年收入是否大于50K美元从疝气病症预测病马的死亡率 6.决策树

说明

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

分类解决离散问题,回归解决连续问题#1.导入分类:from sklearn.tree import DecisionTreeClassifier回归:from sklearn.tree import DecisionTreeRegressor#2.创建模型# max_depth 整数类型,决定对多少个数据特征做分裂tree = DecisionTreeClassifier(max_depth=5)tree = DecisionTreeRegressor(max_depth=5)#3.训练#4.预测

案例

处理鸢尾花数据预测隐形眼镜类型处理make_blobs聚类数据 7.朴素贝叶斯

优点:

朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;对小规模的数据表现很好;能处理多分类任务,适合增量式训练;对缺失数据不太敏感,算法也比较简单,常用于文本分类

缺点:

只能用于分类问题需要计算先验概率;分类决策存在错误率;对输入数据的表达形式很敏感 1、xsdqc分布朴素贝叶斯

应用场景

xsdqc分布就是正态分布用于一般分类问题

使用

#1.导入from sklearn.naive_bayes import GaussianNB#2.创建模型gNB = GaussianNB()#3.训练gNB.fit(data,target)#4.预测y_pre = gNB.predict(x_test) 2、多项式分布朴素贝叶斯

应用场景

适用于文本数据(特征表示的是次数,例如某个词语的出现次数)

使用

#1.导入from sklearn.naive_bayes import MultinomialNB#2.创建模型mNB = MultinomialNB()#3.字符集转换为词频from sklearn.feature_extraction.text import TfidfVectorizer#先构建TfidfVectorizer对象tf = TfidfVectorizer()#使用要转换的数据集和标签集对tf对象进行训练tf.fit(X_train,y_train)#文本集 ----> 词频集X_train_tf = tf.transform(X_train)#4.使用词频集对机器学习模型进行训练mNB.fit(X_train_tf,y_train)#5.预测#将字符集转化为词频集x_test = tf.transform(test_str)#预测mNB.predict(x_test) 案例:垃圾短信过滤 3、伯努利分布朴素贝叶斯

应用场景

适用于伯努利分布,也适用于文本数据(此时特征表示的是是否出现,例如某个词语的出现为1,不出现为0)绝大多数情况下表现不如多项式分布,但有的时候伯努利分布表现得要比多项式分布要好,尤其是对于小数量级的文本数据

使用

#1.导入from sklearn.naive_bayes import BernoulliNB#2.创建模型bNB = BernoulliNB()#3.将字符集转词频集from sklearn.feature_extraction.text import TfidfVectorizertf = TfidfVectorizer()tf.fit(X_train,y_train)X_train_tf = tf.transform(X_train)#4.训练bNB.fit(X_train_tf,y_train)#5.预测#将字符集转化为词频集x_test = tf.transform(test_str)#预测bNB.predict(x_test) 案例
xsdqc分布:普通分类(鸢尾花)多项式分布、伯努利分布:文本处理(垃圾短信、垃圾邮件过滤) 8.支持向量机SVM 原理

解决的问题:

1.线性分类

在训练数据中,每个数据都有n个的属性和一个二类类别标志,我们可以认为这些数据在一个n维空间里。我们的目标是找到一个n-1维的超平面(hyperplane),这个超平面可以将数据分成两部分,每部分数据都属于同一个类别。 其实这样的超平面有很多,我们要找到一个最佳的。因此,增加一个约束条件:这个超平面到每边最近数据点的距离是最大的。也成为最大间隔超平面(maximum-margin hyperplane)。这个分类器也成为最大间隔分类器(maximum-margin classifier)。 支持向量机是一个二类分类器。

2.非线性分类

SVM的一个优势是支持非线性分类。它结合使用拉格朗日乘子法和KKT条件,以及核函数可以产生非线性分类器。
SVM的目的是要找到一个线性分类的最佳超平面 f(x)=xw+b=0。求 w 和 b。

首先通过两个分类的最近点,找到f(x)的约束条件。
有了约束条件,就可以通过拉格朗日乘子法和KKT条件来求解,这时,问题变成了求拉格朗日乘子αi 和 b。
对于异常点的情况,加入松弛变量ξ来处理。
非线性分类的问题:映射到小巧的毛衣、使用核函数。

线性分类及其约束条件:
SVM的解决问题的思路是找到离超平面的最近点,通过其约束条件求出最优解。

使用 #1.导入处理分类问题:from sklearn.svm import SVC处理回归问题:from sklearn.svm import SVR#2.创建模型(回归时使用SVR)svc = SVC(kernel='linear')svc = SVC(kernel='rbf')svc = SVC(kernel='poly')#3.训练svc_linear.fit(X_train,y_train)svc_rbf.fit(X_train,y_train)svc_poly.fit(X_train,y_train)#4.预测linear_y_ = svc_linear.predict(x_test)rbf_y_ = svc_rbf.predict(x_test)poly_y_ = svc_poly.predict(x_test) 9.K均值算法(K-means)

原理

聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中。K-Means算法是一种聚类分析(cluster analysis)的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。

使用

#1.导入from sklearn.cluster import KMeans#2.创建模型# 构建机器学习对象kemans,指定要分类的个数kmean = KMeans(n_clusters=2)#3.训练数据# 注意:聚类算法是没有y_train的kmean.fit(X_train)#4.预测数据y_pre = kmean.predict(X_train) 实例
中国足球定位图片压缩

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。