零基础入门攻略,快速掌握Python机器学习核心技术

零基础入门攻略,快速掌握Python机器学习核心技术"/

零起点学习Python机器学习是一个逐步的过程,以下是一个基础的快速入门指南:
### 基础知识准备
1. "Python基础": - 变量、数据类型、运算符 - 控制流(if-else, 循环) - 函数定义与调用 - 列表、字典、集合等数据结构 - 文件操作
2. "数学基础": - 线性代数(矩阵、向量) - 概率论与数理统计 - 微积分
### 学习资源
1. "在线课程": - Coursera上的《机器学习》课程(吴恩达) - edX上的《Python for Data Science and Machine Learning Bootcamp》 - Udacity的《Intro to Machine Learning》
2. "书籍": - 《Python机器学习基础教程》 - 《Python数据科学手册》 - 《机器学习实战》
### 实践项目
1. "数据分析": - 使用Pandas进行数据清洗、转换和分析 - 使用Matplotlib和Seaborn进行数据可视化
2. "机器学习": - 使用Scikit-learn库进行机器学习模型的训练和预测 - 使用TensorFlow或PyTorch进行深度学习
### 步骤指南
1. "安装Python和必要库

相关内容:

lass="xiangguan" id="content">

代码主要实现了对联合循环电厂(CCPP)数据集使用多种机器学习模型进行训练、预测和评估的功能。具体步骤如下:

  1. 数据读取:通过调用zai.ai_dat_rd函数,从指定路径前缀读取 CCPP 数据集的训练集和测试集的特征及目标变量数据。
  2. 模型训练与评估:定义了mx_fun010函数,该函数根据传入的模型函数标识funSgn,从mxfunSgn字典中获取对应的模型训练函数,对训练集数据进行训练,并在测试集上进行预测。对预测结果进行处理(如取整),然后调用zai.ai_acc_xed函数计算模型的准确率,同时可根据调试标志打印相关信息和保存预测结果。
  3. 模型测试:分别使用标识为'line'(线性模型)和'log'(逻辑模型)的模型进行训练、预测和评估,并记录时间。在使用'log'模型时开启了调试模式。
  4. 结果验证函数:ai_acc_xed函数用于计算模型预测结果的准确率,通过计算真实标签与预测结果的差值、误差百分比等,筛选出误差在阈值内的样本,进而计算准确率,并可在调试模式下打印平均绝对误差、均方误差和均方根误差等评估指标。

通过以上步骤,代码实现了对不同机器学习模型在 CCPP 数据集上的性能评估,为选择合适的模型提供了依据。

import os,sys,re
# 导入os模块用于进行操作系统相关的操作,如文件和目录的处理;sys模块用于访问Python解释器的一些变量和函数;re模块用于正则表达式操作,常用于字符串的匹配、替换等。
import arrow,bs4
# 导入arrow模块用于方便地处理日期和时间相关的任务;bs4是BeautifulSoup库,用于解析HTML和XML文档,以便提取其中的数据。
import pandas as pd
# 导入pandas库,使用别名pd,主要用于数据处理和分析,如数据的读取、清洗、转换、存储等。

import requests
# 导入requests库,用于发送HTTP请求,获取网页内容,是进行网络数据采集的常用工具。
from bs4 import BeautifulSoup 
# 从bs4库中导入BeautifulSoup类,用于对获取到的HTML或XML文档进行解析,以提取所需信息。

#
import zsys
# 导入自定义模块zsys,可能包含一些与系统相关的工具函数或配置信息。
import ztools as zt
# 导入自定义模块ztools并使用别名zt,可能包含一些通用的工具函数,用于辅助代码的执行。
import ztools_str as zstr
# 导入自定义模块ztools_str并使用别名zstr,可能包含一些字符串处理相关的工具函数。
import ztools_web as zweb
# 导入自定义模块ztools_web并使用别名zweb,可能包含一些与网络操作相关的工具函数。
import ztools_data as zdat
# 导入自定义模块ztools_data并使用别名zdat,可能包含一些数据处理相关的工具函数。
import ztop_ai as zai
# 导入自定义模块ztop_ai并使用别名zai,可能包含一些人工智能相关的工具函数,如机器学习模型的训练和评估函数。
import zpd_talib as zta
# 导入自定义模块zpd_talib并使用别名zta,可能包含一些与pandas和talib(技术分析库)相关的工具函数。
#
import tfb_sys as tfsys
# 导入自定义模块tfb_sys并使用别名tfsys,可能包含一些与tfb系统相关的工具函数或配置信息。
import tfb_tools as tft
# 导入自定义模块tfb_tools并使用别名tft,可能包含一些tfb相关的工具函数。
import tfb_strategy as tfsty
# 导入自定义模块tfb_strategy并使用别名tfsty,可能包含一些tfb策略相关的函数。
import tfb_backtest as tfbt
# 导入自定义模块tfb_backtest并使用别名tfbt,可能包含一些tfb回测相关的函数。

#
#-----------------------


def mx_fun010(funSgn,x_train, x_test, y_train, y_test,yk0=5,fgInt=False,fgDebug=False):
    # 定义函数mx_fun010,用于训练和评估机器学习模型
    # 参数funSgn:表示要使用的模型函数的标识字符串
    # 参数x_train:训练集的特征数据,是一个pandas的DataFrame或numpy数组
    # 参数x_test:测试集的特征数据,是一个pandas的DataFrame或numpy数组
    # 参数y_train:训练集的目标变量数据,是一个pandas的Series或numpy数组
    # 参数y_test:测试集的目标变量数据,是一个pandas的Series或numpy数组
    # 参数yk0:误差阈值,用于计算准确率时判断误差是否在可接受范围内,默认为5
    # 参数fgInt:是否对预测结果进行取整操作的标志,默认为False
    # 参数fgDebug:是否开启调试模式的标志,默认为False

    #1
    df9=x_test.copy()
    # 复制测试集的特征数据,创建一个新的DataFrame对象df9
    mx_fun=zai.mxfunSgn
    # 根据funSgn从zai模块的mxfunSgn字典中获取对应的模型训练函数
    mx =mx_fun(x_train.values,y_train.values)
    # 使用获取到的模型训练函数,传入训练集的特征和目标变量数据,训练一个机器学习模型

    #2
    y_pred = mx.predict(x_test.values)
    # 使用训练好的模型对测试集的特征数据进行预测,得到预测结果
    df9,df9=y_test,y_pred
    # 将测试集的真实标签和预测结果分别添加到df9的'y_test'和'y_pred'列中

    #3   
    if fgInt:
        # 如果fgInt为True
        df9=df9
        # 将预测结果复制到'y_predsr'列
        df9=round(df9).astype(int)
        # 对预测结果进行四舍五入,并转换为整数类型,更新'y_pred'列

    #4
    dacc=zai.ai_acc_xed(df9,yk0,fgDebug)
    # 调用zai模块中的ai_acc_xed函数,传入df9、误差阈值yk0和调试标志fgDebug,计算模型的准确率

    #5
    if fgDebug:
        # 如果fgDebug为True
        #print(df9.head())
        print('@fun name:',mx_fun.__name__)
        # 打印当前使用的模型函数的名称
        df9.to_csv('tmp/df9_pred.csv');
        # 将包含预测结果和真实标签的df9保存为CSV文件

    #
    #6
    print('@mx:mx_sum,kok:{0:.2f}%'.format(dacc))   
    # 打印模型的准确率,格式化为保留两位小数的百分比形式
    return dacc,df9   
    # 返回模型的准确率和包含预测结果及真实标签的DataFrame

#-----------------------

#1 
fsr0='dat/ccpp_'
# 定义文件路径前缀
print('#1',fsr0)
x_train, x_test, y_train, y_test=zai.ai_dat_rd(fsr0)
# 调用zai模块中的ai_dat_rd函数,传入文件路径前缀fsr0,读取训练集和测试集的特征及目标变量数据

#2
print('
#2,mx_line')
# 打印提示信息,表示开始使用线性模型进行训练和评估
funSgn='line'
# 定义模型函数标识为'line'
tim0=arrow.now()
# 记录当前时间
dacc,df9=mx_fun010(funSgn,x_train, x_test, y_train, y_test,5,False)
# 调用mx_fun010函数,传入模型函数标识、训练集和测试集数据、误差阈值等参数,进行模型的训练、预测和评估
tn=zt.timNSec('',tim0,True)
# 调用zt模块中的timNSec函数,计算从记录时间到当前的时间差并打印

#3
print('
#3,mx_log')
# 打印提示信息,表示开始使用逻辑模型进行训练和评估
funSgn='log'
# 定义模型函数标识为'log'
tim0=arrow.now()
# 记录当前时间
dacc,df9=mx_fun010(funSgn,x_train, x_test, y_train, y_test,5,False,True)
# 调用mx_fun010函数,传入模型函数标识、训练集和测试集数据、误差阈值等参数,进行模型的训练、预测和评估,并开启调试模式
tn=zt.timNSec('',tim0,True)
# 调用zt模块中的timNSec函数,计算从记录时间到当前的时间差并打印

  
#-----------------------    
print('
ok!')
 #--------mx.fun.sgn
mxfunLst=
# 定义一个列表,包含多种机器学习模型函数的标识字符串
mxfunSgn={'line':mx_line,
          'log':mx_log,
          'bayes':mx_bayes,
          'knn':mx_knn,
          'forest':mx_forest,
          'dtree':mx_dtree,
          'gbdt':mx_GBDT,
          'svm':mx_svm,
          'svmcr':mx_svm_cross,
          'mlp':mx_MLP,
          'mlpreg':mx_MLP_reg
          }
# 定义一个字典,将模型函数标识字符串映射到对应的具体模型训练函数
xmodel={}
# 定义一个空字典,可能用于存储训练好的模型

#结果验证函数
def ai_acc_xed(df9,ky0=5,fgDebug=True):
    # 定义函数ai_acc_xed,用于验证模型的预测结果并计算准确率
    # 参数df9:包含预测结果和真实标签的DataFrame
    # 参数ky0:误差阈值,默认为5
    # 参数fgDebug:是否开启调试模式的标志,默认为True

    #1
    #ny_test,ny_pred=len(df9),len(df9)
    ny_test=len(df9)
    # 获取测试集的样本数量
    df9=df9-df9
    # 计算真实标签和预测结果的差值,添加到'ysub'列
    df9=np.abs(df9)
    # 计算差值的绝对值,添加到'ysub2'列

    #2
    df9=df9
    # 复制'y_test'列到'y_test_p'列
    df9.loc == 0, 'y_test_p'] =0.00001
    # 处理'y_test'为0的情况,避免除零错误
    df9=(df9/df9)*100
    # 计算误差百分比,添加到'ysubk'列
    dfk=df9<ky0]   
    # 筛选出误差百分比小于阈值的样本,保存到dfk中
    dsum=len(dfk)
    # 获取误差百分比小于阈值的样本数量
    dacc=dsum/ny_test*100
    # 计算准确率

    #
    #3
    if fgDebug:
        # 如果调试标志为True
        print('
ai_acc_xed')
        print(df9.head())
        # 打印df9的前几行数据
        y_test,y_pred=df9,df9
        # 获取真实标签和预测结果
        print('
n_df9,{0},n_dfk,{1}'.format(ny_test,dsum))
        # 打印测试集的样本数量和误差百分比小于阈值的样本数量
        dmae=metrics.mean_absolute_error(y_test, y_pred)
        # 计算平均绝对误差
        dmse=metrics.mean_squared_error(y_test, y_pred)
        # 计算均方误差
        drmse=np.sqrt(metrics.mean_squared_error(y_test, y_pred))
        # 计算均方根误差
        print('acc-kok: {0:.2f}%, MAE:{1:.2f}, MSE:{2:.2f}, RMSE:{3:.2f}'.format(dacc,dmae,dmse,drmse))
        # 打印准确率、平均绝对误差、均方误差和均方根误差

    #
    #4
    return dacc    
    # 返回准确率
runfile('D:/zwPython/zwrk/4_零起点Python机器学习快速入门/zai404_mx_01.py', wdir='D:/zwPython/zwrk/4_零起点Python机器学习快速入门')
Reloaded modules: zsys, cpuinfo, ztools, ztools_str, ztools_web, ztools_data, zpd_talib, tfb_sys, tfb_tools, tfb_strategy, ztop_ai, tfb_backtest
#1 dat/ccpp_
dat/ccpp_xtrain.csv
dat/ccpp_xtest.csv
dat/ccpp_ytrain.csv
dat/ccpp_ytest.csv

#2,mx_line
@mx:mx_sum,kok:99.96%
0.09 s, 20:45:24 ,t0, 20:45:24

#3,mx_log
d:zwpythonpy37python-3.7.6.amd64libsite-packagessklearnutilsvalidation.py:760: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)

ai_acc_xed
      AT      V       AP     RH  ...  ysub  ysub2  y_test_p     ysubk
0  17.80  43.72  1008.71  78.50  ...    -7      7       459.0  1.525054
1  29.60  71.14  1011.46  52.69  ...    -1      1       431.0  0.232019
2  11.06  36.71  1021.67  80.44  ...     0      0       474.0  0.000000
3  30.06  67.25  1017.63  53.59  ...    -3      3       435.0  0.689655
4  19.88  47.03  1012.27  91.99  ...   -10     10       456.0  2.192982



n_df9,2392,n_dfk,2379
acc-kok: 99.46%, MAE:6.08, MSE:60.05, RMSE:7.75
@fun name: mx_log
@mx:mx_sum,kok:99.46%
2.59 s, 20:45:27 ,t0, 20:45:24

ok!
d:zwpythonpy37python-3.7.6.amd64libsite-packagessklearnlinear_model_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
    https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
  extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章