机器学习基础项目流程(详细解释)

机器学习在我们现代生活中运用于方方面面,比如医疗检测,人员分类,图像识别,股票预测等等。所谓机器学习,就是将数据载入计算机中,通过一系列操作让计算机对数据进行学习,积累经验,从而能够独立完成目标预测的过程。

在独立完成项目的时候,我们要注意该项目的各项需求,在这里把它分成两种:功能性需求,非功能性需求。对于功能性需求就需要我们逐个去想办法实现,对于非功能性需求我们可以把他放在项目完成的最后,进行美化。

那么项目开始第一步:数据采集

你可以是已有数据导入,也可以通过网络获取,我在这里导入的是自己编辑的一个鸢尾花数据。

import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as p

data = pd.read_csv('iris.data',header=None)

拿到数据后,因为其中肯能会有缺失值、空值、异常值,这里称为‘脏数据’,所以我们要对其进行处理,这一步就叫数据清洗。

***注意在处理数据时一定要保证数据是整数或者浮点型 我就不作演示了***

data.drop_duplicates() 
#删除重复值
print(data.isnull().sum()) 
#看有多少缺失值
for i in data.columns():
    data.fillna(data.median,inplace=True)
#循环填充缺失值
def error(column):
    q1 = column.quantile(0.25)
    q3 = column.quantile(0.75)
    #得到上下四分位数
    iqr = q3-q1
    low_border = q1-iqr*1.5
    high_border = q3+iqr*1.5
    #得到异常范围
    err = (column<low_border)|(column>high_border)
    #筛选异常
    column[err] = column.mean()
    #均值填充 可以根据数据情况选择最佳的填充类型
#填充异常函数
for i in data.columns():
    error(data[i])
#循环使用填充异常函数

项目第二部:选择重要特征(进行特征处理)

#特征选择及处理:对特征进⾏归⼀化、标准化处理、特征降维等;
x = data.iloc[:,:-1]
y = data.iloc[:,-1]
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
x = StandardScaler().fit_transform(x)
x = PCA(2).fit_transform(x)

from sklearn.model_selection import train_test_split
trax,tesx,tray,tesy = train_test_split(x,y,train_size=0.7,random_state=1)

项目第三部:基于机器学习分类模型进行训练

模型介绍附上

# 逻辑回归模型:
# 选择原因:逻辑回归模型简单易懂,计算效率高,适用于二分类问题。
# 适用场景:当数据特征与目标变量之间存在线性关系时,逻辑回归表现良好。
# 逻辑模型训练和测试的底层 更多底层可以自行查阅
class Logistic:
    def __init__(self,lr=0.1,iter=1000):
        self.theta = None
        self.lr = lr
        self.iter = iter
    def fit(self,x,y):
        m,n = x.shape
        self.theta = p.zeros((n,1))
        for i in range(self.iter):
            h = p.dot(x,self.theta)
            s = 1/(1+p.exp(-h))
            cost = y-s
            dele = 1/m*p.dot(x.T,cost)
            self.theta = self.theta-self.lr*dele
    def predict(self,x):
        h = p.dot(x,self.theta)
        s = 1/(1+p.exp(-h))
        return p.where(s<0.5,0,1)
lo = Logistic()
# (2)AdaBoost算法模型:
# 选择原因:利用弱分类器构建强分类器:AdaBoost算法通过迭代的方式,结合多个弱分类器(性能略优于随机猜测的分类器)来构建一个强大的最终分类器(强分类器)。这种策略使得即使弱分类器的性能有限,也能通过组合达到较高的分类精度。适用场景:当数据特征维度较高或存在非线性关系时,SVM可能表现更好。
# 使用场景:
# 分类问题:AdaBoost算法主要适用于二分类和多分类问题,通过改变样本权重和结合多个弱分类器,AdaBoost可以有效地提高分类性能。
# 图像分类:AdaBoost可以用于图像分类任务,如识别不同的物体或场景。
# 文本分类:AdaBoost也可以用于文本分类任务,如情感分析、主题分类等。
# 会员营销预测:在会员营销中,AdaBoost可以帮助企业预测哪些会员会对下一次营销活动做出响应,从而制定更有效的营销策略。
# 回归问题:虽然AdaBoost最初是为分类问题设计的,但它也可以用于回归问题,如房价预测、股票价格预测等。
# 特征选择:AdaBoost可以用于特征选择,通过评估弱分类器在不同特征上的表现来选择最重要的特征。
# 异常检测:AdaBoost可以用于异常检测任务,如网络入侵检测、信用卡欺诈检测等。通过关注那些难以分类的样本,AdaBoost可以检测出异常或欺诈行为。
# 人脸识别:在安全和访问控制系统中,AdaBoost可以用于面部识别任务,如人脸检测、人脸识别等。通过逐步关注难以区分的人	脸特征,AdaBoost可以提高识别系统的准确性
from sklearn.ensemble import AdaBoostClassifier
ad = AdaBoostClassifier()
# (3)集成学习模型:
from sklearn.ensemble import RandomForestClassifier,GradientBoostingClassifier
# 随机森林:基于决策树的集成方法,通过构建多个决策树并取平均值或众数来减少过拟合。
rf = RandomForestClassifier()
# 梯度提升决策树:通过迭代地拟合残差来构建强学习器,对噪	声和异常值较不敏感。
gb = GradientBoostingClassifier()
# 选择原因:集成学习模型能够结合多个弱学习器的优点,提高整体性能。
# 适用场景:当数据特征复杂、非线性关系强或需要提高模型稳定性时,集成学习模型通常表现较好

项目第四步:模型训练和优化

#模型训练
lo.fit(trax,tray)
ad.fit(trax,tray)
rf.fit(trax,tray)
gb.fit(trax,tray)

# 使用网格搜索交叉验证设置合适的超参数,如树的数量等。
gs = GridSearchCV(ad,param_grid={'n_estimators':p.linspace(10,300,30,dtype=int)})
gs.fit(trax,tray)
ad_best = gs.best_params_['n_estimators']
gs = GridSearchCV(rf,param_grid={'n_estimators':p.linspace(10,300,30,dtype=int)})
gs.fit(trax,tray)
rf_best = gs.best_params_['n_estimators']
gs = GridSearchCV(gb,param_grid={'n_estimators':p.linspace(10,300,30,dtype=int)})
gs.fit(trax,tray)
gb_best = gs.best_params_['n_estimators']

项目最后一步:验证得分 模型打包 连接服务器 项目结束。

import time
from sklearn.metrics import accuracy_score,recall_score,confusion_matrix,classification_report,roc_auc_score,roc_curve
def train1(model_name,model_api):
    model = model_api
    train_start =time.time()
    model.fit(trax,tray)
    train_time = time.time()-train_start
    print(f'{model_name}的训练时间:',train_time)

    pre_start = time.time()
    model.predict(tesx)
    pre_time = time.time() - pre_start
    print(f'{model_name}的预测时间:', pre_time)

    acc = accuracy_score(tesy,model.predict(tesx))
    rec = recall_score(tesy,model.predict(tesx))
    con = confusion_matrix(tesy,model.predict(tesx))
    clas = classification_report(tesy,model.predict(tesx))
    fp,tp,th = roc_curve(tesy,model.predict_proba(tesx)[:,1])
    auc = roc_auc_score(tesy,model.predict_proba(tesx)[:,1])
    plt.plot(fp,tp,label=auc)
    plt.legend()
    print(f'{model_name}的准确率、召回率、混淆矩阵、分类报告分别是:',acc,rec,con,clas)
    plt.show()
train1('ad',ad)
train1('rf',rf)
train1('gb',gb)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值