总结sklearn中常用的机器学习算法

监督学习算法

随机森林(RF)

随机森林算法,是bagging集成学习方式中的一种最具有特色的机器学习方法。它是以决策树为基本分类器,如果为分类问题,则最终采用投票法来决定类别;若为回归问题,则采用平均值的方法决定最终预测值。决策树算法带有剪枝过程,但RF算法没有此步骤。根据回归问题和分类问题,sklearn将RF算法分为:分类RF和回归RF。主要是依据样本特征而确定。可以直接利用RF进行多分类问题。一般情况下,RF做分类用CART决策树中的gini指数来选择最优特征。

利用纸鸢花数据集,进行预测分析,前4列为属性,第五列为类别。共150条数据,三个类别,每个类别50条数据。
纸鸢花数据集

def open_file(file_address):
    data = pd.read_csv(file_address,encoding='utf-8')
    #类别做标签
    data.loc[data.species == 'Iris-setosa', 'species'] = 0
    data.loc[data.species == 'Iris-versicolor', 'species'] = 1
    data.loc[data.species == 'Iris-virginica', 'species'] = 2
    dataset = data.loc[:,("sepal_length","sepal_width",\
                       "petal_length","petal_width")]
    label = data.loc[:,("species")]
    dataset = np.array(dataset) #转成numpy
    label = np.array(label)
    Num = len(dataset)
    return dataset,label,Num

将数据集按照37分为测试集和训练集,用到的是sklearn数据预处理模块中的函数。

from sklearn.model_selection import train_test_split
def  dataset_split(dataset,label) :#将训练集和样本分别代入函数
    x_train, x_test, y_train, y_test = train_test_split(dataset,label, \ 
                            test_size=0.3,random_state=0)
    return x_train, x_test, y_train, y_test  #返回训练样本,测试样本,训练标签,测试标签

数据预处理,采用最大值减去最小值的方法,做均一化处理。可以参考下面这篇文章。
https://blog.csdn.net/foneone/article/details/83151906

def data_handle(dataset): #利用最小最大值做处理
    scaler = preprocessing.MinMaxScaler\
        (feature_range=(0, 1)).fit(dataset)
    scaler.transform(dataset)
    return dataset

构建模型

from sklearn.ensemble import RandomForestClassifier  #做分类
#from sklearn.ensemble import RandomForestRegressor 回归
from sklearn import metrics  # 计算模型准确率等函数库
dataset,label,Num = open_file('C:\\Users\\happy\\Desktop\\Iris.csv') #获取数据
dataset = data_handle(dataset) #均一化处理 
x_train, x_test, y_train, y_test =  dataset_split(dataset,label) #调用预测集合测试集划分函数

def train_RandomForests(x_train, x_test, y_train, y_test):
    model_RF = RandomForestClassifier(n_estimators=20,max_features="auto",criterion='gini',\
                                                    n_jobs=4,oob_score=True) #建立模型,设置相应模型参数
    model_RF.fit(x_train, y_train)  #调用fit训练
    y_pred = model_RF.predict(x_test)   #测试集测试 
    print(y_pred) #将预测类输出
    print("RF准确率为:{0:%}".format(metrics.accuracy_score(y_test, y_pred))) #计算模型准确率
  
train_RandomForests(x_train, x_test, y_train, y_test) #调用建立好的模型

上面为完整代码,其中n_estimators=20,max_features=“auto”,criterion=‘gini’,
n_jobs=4,oob_score=True,均是RF模型参数,如何设置参数,可以查看下面这篇博客。
https://blog.csdn.net/w952470866/article/details/78987265

提升树 和 梯度提升树(GDBT)

提升树是以分类树或者回归树为基本分类器的提升方法。提升方法实际采用加法模型(基模型的线性组合)与前向分布算法。不同问题的提升学习算法,主要区别在于使用的损失函数不同,用平方损失函数来解决回归问题,用指数损失函数解决分类问题,用一般的损失函数解决一般的决策问题。

对于一般损失函数而言,优化不容易,针对这个问题,Freidman提出了梯度提升算法。利用最速下降的近似方法,作为回归问题提升树算法中的残差的近似值,拟合回归树。

from sklearn.ensemble import GradientBoostingClassifier  #梯度提升树

def train_GDBT(x_train,x_test,y_train,y_test):
    model_GDBT = GradientBoostingClassifier()
    #n_estimators=60,learning_rate=0.1,random_state=10
    model_GDBT.fit(x_train,y_train)
    #测试集测试
    y_pred = model_GDBT.predict(x_test)
    #准确率预测
    print(y_pred) #将预测类输出
    print("GDBT准确率为:{0:%}".format(metrics.accuracy_score(y_test, y_pred))) #计算模型准确率

train_train_GDBT(x_train, x_test, y_train, y_test) #调用建立好的模型

参数问题,可参考下面这篇文章。
https://www.cnblogs.com/pinard/p/6143927.html

逻辑斯谛回归

一种名字里面虽然带有“回归”二字,却实打实的是一个“分类”算法的算法,可以做多分类问题。

from sklearn.linear_model import LogisticRegression #逻辑斯蒂回归
model_Log = LogisticRegression(max_iter = 100,solver='liblinear')
model_Log.fit( x_train,y_train)
y_pred = model_Log.predict(x_test)
print("逻辑斯谛回归准确率为:{0:%}".format(metrics.accuracy_score(y_test, y_pred)))

SVM

SVM的详细讲述不再赘述,依旧使用当前数据,代码如下。

from sklearn.svm import SVC #SVM
def train_SVM(x_train, x_test, y_train, y_test):
    model_SVM = SVC() #建立模型,设置相应模型参数
    model_SVM.fit(x_train, y_train)  #调用fit训练
    y_pred = model_SVM.predict(x_test)   #测试集测试 
    print(y_pred) #将预测类输出
    print("SVM准确率为:{0:%}".format(metrics.accuracy_score(y_test, y_pred))) #计算模型准确率
  
train_SVM(x_train, x_test, y_train, y_test) #调用建立好的模型

非监督学习

k-means算法,也成为k均值算法。一种采用贪心策略的局部最优问题的聚类算法。

import pandas as pd
import numpy as np
import random as ran
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d  #  绘图
from sklearn.cluster import KMeans #K均值算法
 
def model_test():
    data = open_file("C:\\Users\\happy\\Desktop\\Iris1.csv") #获取数据集
    dataset = np.delete(data,-1,axis=1) #去掉最后一列
    k_means = KMeans(n_clusters=3) #构建模型
    k_means.fit(dataset)
    km4_labels = k_means.labels_
    ax = plt.subplot(projection='3d')
    ax.scatter(dataset[:,0],dataset[:,1],dataset[:,2],\
               c=km4_labels.astype(np.float))
    ax.set_zlabel('Z')  # 绘制坐标轴
    ax.set_ylabel('Y')
    ax.set_xlabel('X')
    plt.show()

依旧是纸鸢花数据集,只不过把标签去掉了,为了能够三维展示,选取了前三维,做一个3个标签的聚类算法。
算法的过程描述为下图,来自《机器学习》(周志华)

k均值算法过程

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sklearn库是Python常用的机器学习库之一,其包含了许多常用机器学习算法。以下是一些常见的算法及其调用方法: 1. 线性回归(Linear Regression): ```python from sklearn.linear_model import LinearRegression # 构建模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` 2. 逻辑回归(Logistic Regression): ```python from sklearn.linear_model import LogisticRegression # 构建模型 model = LogisticRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` 3. 决策树(Decision Tree): ```python from sklearn.tree import DecisionTreeClassifier # 构建模型 model = DecisionTreeClassifier() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` 4. 随机森林(Random Forest): ```python from sklearn.ensemble import RandomForestClassifier # 构建模型 model = RandomForestClassifier() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` 5. 支持向量机(Support Vector Machine): ```python from sklearn.svm import SVC # 构建模型 model = SVC() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` 6. K均值聚类(K-Means Clustering): ```python from sklearn.cluster import KMeans # 构建模型 model = KMeans(n_clusters=3) # 训练模型 model.fit(X_train) # 预测 y_pred = model.predict(X_test) ``` 以上是一些常见的算法调用方法,当然sklearn还有很多其他的算法可供选择。在使用时需要根据具体问题选择合适的算法,并对其进行合适的参数调整和模型评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Foneone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值