机器学习工程化过程
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_data
和encoder_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
训练好后,将模型保存下来:
5、工程化(应用化)
选个框架django活动flask进行web化
6、部署上线
django是单线程比较慢,可以将其部署到一个web容器上,如gunicorn
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiabibi
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22