关于机器学习的完整项目实战(一)

学习机器学习的操作步骤

  1. 按题目要求选取算法
  2. 加载数据
  3. 数据预处理
  4. 根据经验设置参数建立模型并训练
  5. 根据训练结果返回调节参数
  6. 输出模型评价指标

应用机器学习的操作步骤

  1. 不指定算法的情况下,根据经验选几个可能的算法
  2. 加载数据
  3. 数据预处理
  4. 选取小规模数据使用交叉验证对上述几个可能算法进行评估比较,选出最适合的算法
  5. 使用表格搜索对最优算法交叉验证,获得模型的最优参数
  6. 使用最优参数建立模型
  7. 使用管道机制将数据处理,降维,最优模型等模块进行封装
  8. 将数据传入管道训练,打印输出各项指标
  9. 将管道模型保存至本地,可以循环使用

以脑瘤数据集为例整合代码如下

'''
	导包的时候不要着急,不要强行记忆,用到什么导入什么即可
'''
# 当需要对矩阵求平均值的时候,导入numpy
import numpy as np
# 当加载数据的时候,导入语pandas
import pandas as pd
# 当警告过多的时候,导入warnings来忽略警告
import warnings
# 当数据需要标准化处理的时候,导入标准化函数
from sklearn.preprocessing import StandardScaler
# 当需要降维的时候,导入pca降维算法
from sklearn.decomposition import PCA
# 当需要建立逻辑回归模型的时候,导入LogisticRegression
from sklearn.linear_model import LogisticRegression
# 当需要建立决策树分类树模型的时候,导入DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
# 当需要对数据集进行切割,表格搜索,交叉验证的时候,导入cross_val_score,GridSearchCV,train_test_split
from sklearn.model_selection import cross_val_score,GridSearchCV,train_test_split
# 当需要建立支持向量机的分类模型的时候,导入SVC
from sklearn.svm import SVC
# 当需要对模快进行封装的时候,导入Pipeline
from sklearn.pipeline import Pipeline
# 当需要各项评价指标的时候,导入roc_auc_score,roc_curve等,还有混淆矩阵,分类报告等
from sklearn.metrics import roc_auc_score,roc_curve
# 当需要画图的时候,导入pyplot
from matplotlib import pyplot as plt
# 当需要保存模型的时候,导入joblib
from sklearn.externals import joblib

# 忽略过多的警告
warnings.filterwarnings('ignore')

# 加载数据
df = pd.read_excel(r'../datas/naoliu.xls')

# 显示尽可能多的列数
pd.set_option('display.max_columns',20)
# 显示尽可能多的行数
pd.set_option('display.max_rows',200)
# print(df.columns)
# print(df.head())

# 删除带有缺失值的样本,删除无用的列
df.drop(columns=['Unnamed: 0'],inplace=True)
df.dropna(inplace=True)
# print(df.head())

# 提取小样本作为训练样本
df_small = df.sample(500)
# print(df_small.head())

# 数据提取
X = df_small.iloc[:,:-1]
y = df_small.iloc[:,-1]

# 数据标准化
X = StandardScaler().fit_transform(X)

# 降至3维
model_pca = PCA(n_components=3)
X = model_pca.fit_transform(X)

# 交叉验证比较逻辑回归,SVM和决策树哪个算法会更好的拟合数据 用f1值做评价指标,cv=10
LR = LogisticRegression(max_iter=2000)
DT = DecisionTreeClassifier()
SVM = SVC(kernel='linear',max_iter=2000)
LR_f1 = cross_val_score(LR,X,y,scoring='f1',cv=10)
DT_f1 = cross_val_score(DT,X,y,scoring='f1',cv=10)
SVM_f1 = cross_val_score(SVM,X,y,scoring='f1',cv=10)

print('LR,f1指标是:',np.mean(LR_f1))
print('SVM,f1指标是:',np.mean(SVM_f1))
print('DT,f1指标是:', np.mean(DT_f1))

# 选择出较好的算法 用表格搜索调节找到最优的参数cv=10 经过比较,SVM效果更好
# 设置参数集
params = {
    'C':[0.1,0.3,0.03,1,3,5,10,13,30,50,100,500,1000],
    'kernel':['rbf','linear','sigmoid'],
    'max_iter':[500,1000,2000,5000,10000]
}
# 表格搜索会穷举参数集的各种组合,选择出最优的那一组参数
model_nice = GridSearchCV(SVM,param_grid=params).fit(X,y)
best_score = model_nice.best_params_
print(best_score)

# 用管道封装最优参数的模型
model_pip = Pipeline([
    ('ss',StandardScaler()),
    ('pca',PCA(n_components=3)),
    ('svm',SVC(C=best_score.get('C'),kernel=best_score.get('kernel'),max_iter=best_score.get('max_iter'),probability=True))
])

# 将整体样本切分为训练集和测试集
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)

# 训练集训练
model_pip.fit(X_train,y_train)
pred = model_pip.predict(X_test)
preds = model_pip.predict_proba(X_test)

# 测试集测试
print(model_pip.score(X_test,y_test))
print(model_pip.score(X_train,y_train))

# 评价指标 打印准确率,混淆矩阵和分类报告,打印auc值,画出roc曲线。
AUC = roc_auc_score(y_test,preds[:,-1])
print(AUC)
TPR,FPR,TH = roc_curve(y_test,preds[:,-1])

# 画图
# 设置中文字体和负号正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('ROC曲线')
plt.plot(TPR,FPR)
plt.show()

# 保存模型
joblib.dump(model_pip,filename='naoliu.model')

效果如下

在这里插入图片描述
在这里插入图片描述

加载保存好的模型用于工业预测

import pandas as pd
import warnings
from sklearn.externals import joblib
# 忽略警告
warnings.filterwarnings('ignore')
# 读取数据
df = pd.read_excel(r'../datas/naoliu.xls')
df.drop(columns=['Unnamed: 0'],inplace=True)
df.dropna(inplace=True)
# 提取数据
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
# 加载保存好的模型
model = joblib.load(filename='naoliu.model')
# 输出预测准确率(可以直接拿来使用)
print(model.score(X, y))
# 预测准确率
>>0.8457831325301205
  • 4
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值