零起点学习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和必要库
相关内容:
代码主要实现了对联合循环电厂(CCPP)数据集使用多种机器学习模型进行训练、预测和评估的功能。具体步骤如下:
- 数据读取:通过调用zai.ai_dat_rd函数,从指定路径前缀读取 CCPP 数据集的训练集和测试集的特征及目标变量数据。
- 模型训练与评估:定义了mx_fun010函数,该函数根据传入的模型函数标识funSgn,从mxfunSgn字典中获取对应的模型训练函数,对训练集数据进行训练,并在测试集上进行预测。对预测结果进行处理(如取整),然后调用zai.ai_acc_xed函数计算模型的准确率,同时可根据调试标志打印相关信息和保存预测结果。
- 模型测试:分别使用标识为'line'(线性模型)和'log'(逻辑模型)的模型进行训练、预测和评估,并记录时间。在使用'log'模型时开启了调试模式。
- 结果验证函数: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)