一些主要的分类算法介绍。
sklearn转换器和估计器 转换器 我们把特征工程的接口称之为转换器,其中转换器调用有这么几种形式 
fit_transform  
fit —— 计算  
transform —— 进行最终的转换  
 
估计器 在sklearn中,估计器(estimator)是一个重要的角色,是一类实现了算法的API
1、用于分类的估计器:
sklearn.neighbors k-近邻算法 
sklearn.naive_bayes 贝叶斯 
sklearn.linear_model.LogisticRegression 逻辑回归 
sklearn.tree 决策树与随机森林 
 
 
2、用于回归的估计器:
sklearn.linear_model.LinearRegression 线性回归 
sklearn.linear_model.Ridge 岭回归 
 
 
3、用于无监督学习的估计器
sklearn.cluster.KMeans 聚类 
 
 
 
步骤 1、实例化一个estimator(转换器)
2、estimator.fit (x_train, y_train) 计算
——调用完毕,生成模型
3、模型评估:
    (1)直接对比真实值和预估值
                y_predict = estimator.predict(x_test)
                y_test == y_predict
    (2)计算准确率
                accuracy = extimator.score(x_test, y_test)
K-近邻算法 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别 ,则该样本也属于这个类别。
来源:KNN算法最早是由Cover和Hart提出的一种分类算法
 
距离公式 两个样本的距离可以通过如下公式计算,又叫欧式距离。
还有其他的距离公式,如:曼哈顿距离,明可夫斯基距离等。
 
K-近邻算法API sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=’auto’)
n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数 
algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率) 
 
案例:基于鸢尾花数据集的KNN算法实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 """ fit:原义指的是安装、使适合的意思,其实有点train的含义但是和train不同的是,     它并不是一个训练的过程,而是一个适配的过程,过程都是定死的,最后只是得到了一个统一的转换的规则模型。 transform:是将数据进行转换,比如数据的归一化和标准化,将测试数据按照训练数据同样的模型进行转换,得到特征向量。 fit_transform:可以看做是fit和transform的结合,     如果训练阶段使用fit_transform,则在测试阶段只需要对测试样本进行transform就行了。 """ def  knn_iris () :    """      用 knn 算法对鸢尾花进行分类     """          iris = load_iris()          x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6 )          transfer = StandardScaler()     x_train = transfer.fit_transform(x_train)      x_test = transfer.transform(x_test)		            estimator = KNeighborsClassifier(n_neighbors=3 )     estimator.fit(x_train, y_train)               y_predict = estimator.predict(x_test)     print("y_predict:" , y_predict)     print("直接对比真实值和预估值:" , y_test == y_predict)          score = estimator.score(x_test, y_test)     print("准确率为: " , score)     return  None  
交叉验证和网格搜索 什么是交叉验证(cross validation) 交叉验证,就是将拿到的训练数据,分为训练和验证集。
即 为了让从训练得到模型结果更加准确。 做以下处理
以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。
交叉验证目的:为了让被评估的模型更加准确可信 
什么是网格搜索(Grid Search) 通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数 。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。 
超参数是在机器开始学习之前设置,不是通过训练得到的。
交叉验证,网格搜索(模型选择与调优)API sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
对估计器的指定参数值进行详尽搜索 
estimator:估计器对象 
param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]} 
cv:指定几折交叉验证 
fit:输入训练数据 
score:准确率 
结果分析:
bestscore__:在交叉验证中验证的最好结果 
bestestimator:最好的参数模型 
cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果 
 
 
 
参考链接:https://blog.csdn.net/hohaizx/article/details/81013985 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 from  sklearn.datasets import  load_irisfrom  sklearn.model_selection import  train_test_split, GridSearchCVfrom  sklearn.preprocessing import  StandardScalerfrom  sklearn.neighbors import  KNeighborsClassifier""" fit:原义指的是安装、使适合的意思,其实有点train的含义但是和train不同的是,     它并不是一个训练的过程,而是一个适配的过程,过程都是定死的,最后只是得到了一个统一的转换的规则模型。 transform:是将数据进行转换,比如数据的归一化和标准化,将测试数据按照训练数据同样的模型进行转换,得到特征向量。 fit_transform:可以看做是fit和transform的结合,     如果训练阶段使用fit_transform,则在测试阶段只需要对测试样本进行transform就行了。 """ def  knn_iris () :         iris = load_iris()          x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22 )               transfer = StandardScaler()          x_train = transfer.fit_transform(x_train)     x_test = transfer.transform(x_test)               estimator = KNeighborsClassifier()               param_dict = {"n_neighbors" : [1 , 3 , 5 ]}     estimator = GridSearchCV(estimator, param_grid=param_dict, cv=5 )          estimator.fit(x_train, y_train)               y_predict = estimator.predict(x_test)     print("比对预测结果和真实值:\n" , y_predict == y_test)          score = estimator.score(x_test, y_test)     print("直接计算准确率:\n" , score)     print("在交叉验证中验证的最好结果:\n" , estimator.best_score_)     print("最好的参数模型:\n" , estimator.best_estimator_)     print("每次交叉验证后的准确率结果:\n" , estimator.cv_results_) if  __name__ == "__main__" :    knn_iris()      
朴素贝叶斯算法 先初步给出代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 from  sklearn.naive_bayes import  MultinomialNBfrom  sklearn.datasets import  fetch_20newsgroupsfrom  sklearn.datasets import  load_irisfrom  sklearn.model_selection import  train_test_splitfrom  sklearn.feature_extraction.text import  TfidfVectorizerdef  nb_news () :    """      用 朴素贝叶斯 方法对新闻进行分类     :return:     """     news = fetch_20newsgroups(subset='all' )          x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)          transfer = TfidfVectorizer()          x_train = transfer.fit_transform(x_train)     x_test = transfer.transform(x_test)          estimator = MultinomialNB()     estimator.fit(x_train, y_train)     y_predict = estimator.predict(x_test)     print(y_predict)     print(y_predict == y_test)     score = estimator.score(x_test, y_test)     print(score)     return  None  if  __name__ == "__main__" :    nb_news()