简单机器学习工程化过程

1、确认需求(构建问题)

我们需要做什么?

比如根据一些输入数据,预测某个值?

比如输入一些特征,判断这个是个什么动物?

这里我们要可以尝试分析一下,我们要处理的是个什么问题?

分类问题?回归问题?

目前有哪些方案处理这种问题?比如逻辑回归? SVM?神经网络?随机森林?

确认特征(获取数据)

要确认好我们需要哪些特征,以及这些特征的数据应该如何获取到?

比如数据库获取? 从文件(txt、excel等)读取?并对数据做简单的处理,比如去掉缺省值等

3、特征处理

特征编码(为什么要进行编码? 因为很多特征是字符串,我们得转化为数字或者二进制才能计算)

比较常用的:

onehot编码

复制代码
# pandas进行onehot编码
import pandas as pd
df = pd.DataFrame([
    ["green","M",20,"class1"],
    ["red","L",21,"class2"],
    ["blue","XL",30,"class3"],
])
df.columns = ["color","size","weight","class label"]
df2 = pd.get_dummies(df["class label"])


# sklearn工具类进行onehot编码
from sklearn.feature_extraction import DictVectorizer
alist = [
    {"city":"beijing","temp":33},
    {"city":"GZ","temp":42},
    {"city":"SH","temp":40},
]
d = DictVectorizer(sparse=False)
feature = d.fit_transform(alist)
print(d.get_feature_names())
print(feature)

Label Encoding

但是一次只能处理一列,要for进行处理

复制代码
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
df['Sex']=le.fit_transform(df['Sex'])

注:编码要注意的是,你编码过程模型的输入输出也是经过编码的。 上述两种编码是基于列种值的类别来进行编码的,所以你每训练一次,都需要保存下编码的类别,并在预测输入数据的时候,使用相同的类别数据进行编码:

我们可以直接保存old_dataencoder_data和之间的映射关系,字典或者下面的csv格式里都可以。

复制代码
for col in beat_sparse_cols:                   # sparse_feature encoder
    lbe = LabelEncoder()
    # 直接在原来的表上进行修改
    beat_data[col] = lbe.fit_transform(beat_data[col])
    # # method 2: save dict(selected), 为每个lbe保存一个对应的字典
    name = "encoding_" + str(col) + "_dict"
    locals()[name] = {}
    for i in list(lbe.classes_):
        # encoding[i] = lbe.transform([i])[0]
        locals()[name][i] = lbe.transform([i])[0]
    # save the lbe dict, note the index
    df = pd.DataFrame(locals()[name], index = [0])
    # df = pd.DataFrame(list(my_dict.items()), columns=['key', 'value'])   # 否则默认保存的key是str
    df.to_csv(save_dir + "/" + str(col) + "lbe_dict.csv", index = False)

在预测的新数据的时候,加载出来,查找类别,对新输入进行编码。遇到没有类别的要特殊处理如:

复制代码
# train and test are pandas.DataFrame's and c is whatever column
le = LabelEncoder()
le.fit(train[c])
test[c] = test[c].map(lambda s: '<unknown>' if s not in le.classes_ else s)
le.classes_ = np.append(le.classes_, '<unknown>')
train[c] = le.transform(train[c])
test[c] = le.transform(test[c])	

归一化(当所有数据权重一样时使用)

复制代码
# 归一化
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler(feature_range=(0,1))
data = [
    [90,2,10,40],
    [60,5,15,45],
    [73,3,13,45]
]
data = mm.fit_transform(data)

标准化(当数据存在巨大异常值时使用)

复制代码
from sklearn.preprocessing import StandardScaler
ss=StandardScaler()
data = [
    [90,2,10,40],
    [60,5,15,45],
    [73,3,13,45]
]
data =ss.fit_transform(data)
print(data)

方差过滤和PCA

复制代码
# Filter过滤式(方差过滤)
from sklearn.feature_selection import VarianceThreshold
v = VarianceThreshold(threshold=2)
a=v.fit_transform([[0,2,4,3],[0,3,7,3],[0,9,6,3]])


# PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
a = pca.fit_transform([[0,2,4,3],[0,3,7,3],[0,9,6,3]])

包括PCA和标准化也和编码一样,要考虑输入单个数据的时候,如何进行?

如何进行反标准化等。

4、选择算法、训练模型

选择算法不再多说。

必须要做参数等交叉验证,方便看看哪个算法的哪个算子上表现的最好。

model_selection.cross_val_score

【sklearn】sklearn中的交叉验证_sklearn交叉验证_L鲸鱼与海的博客-CSDN博客

训练好后,将模型保存下来:

【Sklearn】3种模型保存的文件格式及调用方法_sklearn 导出模型_人工智的博客-CSDN博客

5、工程化(应用化)

选个框架django活动flask进行web化

【python】Django_人工智的博客-CSDN博客

6、部署上线

django是单线程比较慢,可以将其部署到一个web容器上,

相关推荐
珠海西格电力科技20 分钟前
微电网控制策略基础:集中式、分布式与混合式控制逻辑
网络·人工智能·分布式·物联网·智慧城市·能源
Java后端的Ai之路1 小时前
【RAG技术】- RAG系统调优手段之高效召回(通俗易懂附案例)
人工智能·rag·rag系统·召回·rag调优
草莓熊Lotso1 小时前
Linux 基础 IO 初步解析:从 C 库函数到系统调用,理解文件操作本质
linux·运维·服务器·c语言·数据库·c++·人工智能
Cx330❀1 小时前
从零实现Shell命令行解释器:原理与实战(附源码)
大数据·linux·数据库·人工智能·科技·elasticsearch·搜索引擎
Niuguangshuo8 小时前
深入解析Stable Diffusion基石——潜在扩散模型(LDMs)
人工智能·计算机视觉·stable diffusion
迈火8 小时前
SD - Latent - Interposer:解锁Stable Diffusion潜在空间的创意工具
人工智能·gpt·计算机视觉·stable diffusion·aigc·语音识别·midjourney
wfeqhfxz25887828 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
芝士爱知识a8 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
Li emily8 小时前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi
Aaron15888 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理