数据分析--模型选择流程

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

分析小麦数据时的模型选择

一、模型总结

1)分类问题

1、knn

缺点:
时间复杂度 空间复杂度高
优点:
实现简单,易于理解
总结:适合样本最小,分类边界不明显的情况

2、逻辑回归

优点:
分类时计算量非常小,速度很快,存储资源低
缺点:
容易欠拟合,准确度不高
总结:适合样本量大的情况

3、决策树

优点:
对于有明确业务逻辑的数据分类效果好,分类效果可解释性强,容易提取出规则
缺点:
容易过拟合和欠拟合
总结:适合有业务逻辑的数据

4、贝叶斯

总结:主要用于自然语言处理

5、svm(支持向量机)

优点:
样本量最小的情况下,效果好,不容易过拟合
缺点:
当观测样本很多时,效率并不是很高
总结:
适合样本最小,分类边界比较明显的情况

2)回归问题

1、线性回归

缺点:
和svm相比容易欠拟合
优点:
实现简单,计算简单
总结:
回归时,样本量大 用线性回归

2、岭回归

总结:用于图片之类的特征维度很多的回归预测

3、lasso回归

总结:用于需要去除部分不重要特征的回归预测

4、svm(支持向量机)

总结:回归时,样本量小 用svm

3)聚类

1、kmeas

优点:
当簇是密集的、球状或者团状的,且蔟与簇中间区别明显的时候,聚类效果较好
缺点:
最大的问题就是K的选取
总结:
不知道该分几类的时候,可以用聚类来看效果

二、业务流程

1)数据获取

一般业务会给数据 / 爬虫自己爬取

2)数据预处理

特征选择、归一化、二值化、数值映射、2vector、PCA LDA、清洗和过滤

3)算法选择

检验、测试、交叉验证、svm、logistic、decition Tree

4)算法调优

网格搜索(对参数进行筛选)

5)算法评价

精确率 - 查准率
召回率 - 查全率

6)分析报告

三、获取数据

1)获取数据

1、导包导入数据

import numpy as np
import pandas as pd

df = pd.read_table('./data/wheats.tsv',header=None)
df

2、处理数据

data = df.iloc[:,:-1]
target = df.iloc[:,-1]

2)

3)

4)

5)

6)

四、数据预处理

1)导包

# sklearn官网
# MinMaxScaler 区间归一化 (当前值-最小值)/(最大值-最小值)
# StandardScaler 标准化 (当前值-平均值)/标准差
# Normalizer 归一化 (当前值-平均值)/(最大值-最小值)
# Binarizer 二值化 (这里就不尝试了 主要用来处理图片)
from sklearn.preprocessing import MinMaxScaler,Normalizer,StandardScaler,Binarizer

2)创建模型-训练模型-用模型转化数据

minmax_data = MinMaxScaler().fit_transform(data)
normal_data = Normalizer().fit_transform(data)
standard_data = StandardScaler().fit_transform(data)

3)拆分训练集和测试集

先按照 0.25的 比例 对 各种预处理方式 转换后的数据 进行学习
(各种机器学习模型都尝试一下) 看看效果

X_train1, X_test1, y_train1, y_test1 = train_test_split(data,target,test_size=0.25)  # 没有处理的数据
X_train2, X_test2, y_train2, y_test2 = train_test_split(minmax_data,target,test_size=0.25)
X_train3, X_test3, y_train3, y_test3 = train_test_split(normal_data,target,test_size=0.25)
X_train4, X_test4, y_train4, y_test4 = train_test_split(standard_data,target,test_size=0.25)

4)使用一些分类模型去处理

使用一些分类模型去尝试 knn lgc dtree nb svc

1、导包

from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

2、获取模型

knn = KNeighborsClassifier()
lgc = LogisticRegression()
dtree = DecisionTreeClassifier()
gnb = GaussianNB()
svc = SVC()

3、定义函数 选择使用 哪一种 预处理方式

使用各种模型 对 各种处理后的 数据 进行测试

def select_preprocessor(model,name,X_train, X_test, y_train, y_test):
    model.fit(X_train,y_train)
    score = model.score(X_test,y_test)
    print("{}模型 {}处理的数据 得分是{}".format(model.__class__.__name__,name,score))


# knn.__class__.__name__   以这种方式提取模型名称
# 'KNeighborsClassifier'

4、使用各个模型进行数据预测

使用KNN模型进行预测
select_preprocessor(knn,'未',X_train1, X_test1, y_train1, y_test1 )
select_preprocessor(knn,'minmax',X_train2, X_test2, y_train2, y_test2 )
select_preprocessor(knn,'normal',X_train3, X_test3, y_train3, y_test3 )
select_preprocessor(knn,'standard',X_train4, X_test4, y_train4, y_test4 )


KNeighborsClassifier模型 未处理的数据 得分是0.8867924528301887
KNeighborsClassifier模型 minmax处理的数据 得分是0.9433962264150944
KNeighborsClassifier模型 normal处理的数据 得分是0.9056603773584906
KNeighborsClassifier模型 standard处理的数据 得分是0.8867924528301887
使用lgc模型进行预测
select_preprocessor(lgc,'未',X_train1, X_test1, y_train1, y_test1 )
select_preprocessor(lgc,'minmax',X_train2, X_test2, y_train2, y_test2 )
select_preprocessor(lgc,'normal',X_train3, X_test3, y_train3, y_test3 )
select_preprocessor(lgc,'standard',X_train4, X_test4, y_train4, y_test4 )


LogisticRegression模型 未处理的数据 得分是0.9245283018867925
LogisticRegression模型 minmax处理的数据 得分是0.9245283018867925
LogisticRegression模型 normal处理的数据 得分是0.7735849056603774
LogisticRegression模型 standard处理的数据 得分是0.8490566037735849
使用决策树模型进行预测
select_preprocessor(dtree,'未',X_train1, X_test1, y_train1, y_test1 )
select_preprocessor(dtree,'minmax',X_train2, X_test2, y_train2, y_test2 )
select_preprocessor(dtree,'normal',X_train3, X_test3, y_train3, y_test3 )
select_preprocessor(dtree,'standard',X_train4, X_test4, y_train4, y_test4 )


DecisionTreeClassifier模型 未处理的数据 得分是0.9056603773584906
DecisionTreeClassifier模型 minmax处理的数据 得分是0.9245283018867925
DecisionTreeClassifier模型 normal处理的数据 得分是0.8490566037735849
DecisionTreeClassifier模型 standard处理的数据 得分是0.9056603773584906
使用gnb(高斯)模型进行预测
select_preprocessor(gnb,'未',X_train1, X_test1, y_train1, y_test1 )
select_preprocessor(gnb,'minmax',X_train2, X_test2, y_train2, y_test2 )
select_preprocessor(gnb,'normal',X_train3, X_test3, y_train3, y_test3 )
select_preprocessor(gnb,'standard',X_train4, X_test4, y_train4, y_test4 )

GaussianNB模型 未处理的数据 得分是0.8679245283018868
GaussianNB模型 minmax处理的数据 得分是0.8867924528301887
GaussianNB模型 normal处理的数据 得分是0.8867924528301887
GaussianNB模型 standard处理的数据 得分是0.9433962264150944
使用svc模型进行预测
select_preprocessor(svc,'未',X_train1, X_test1, y_train1, y_test1 )
select_preprocessor(svc,'minmax',X_train2, X_test2, y_train2, y_test2 )
select_preprocessor(svc,'normal',X_train3, X_test3, y_train3, y_test3 )
select_preprocessor(svc,'standard',X_train4, X_test4, y_train4, y_test4 )



SVC模型 未处理的数据 得分是0.8679245283018868
SVC模型 minmax处理的数据 得分是0.9056603773584906
SVC模型 normal处理的数据 得分是0.24528301886792453
SVC模型 standard处理的数据 得分是0.9056603773584906

观察可以得出normal肯定是不用了 #其他方式都差不多 就可以不处理了

五、选择模型

选择模型主要是选择比较稳定的模型

1)获取数据

使用不处理的数据对模型进行训练,查看准确率

data
target

2)定义模型测试函数

定义函数

def select_model(model,data,target,rate):
    X_train, X_test, y_train, y_test = train_test_split(data,target,test_size=rate)
    model.fit(X_train,y_train)
    score = model.score(X_test,y_test)
    print(model.__class__.__name__+':'+str(score))
    return score

# 传入一个列表 列表里面都是 各种模型
def select_model2(models,data,target):
    for model in models:
        score1 = select_model(model,data,target,0.1)
        score2 = select_model(model,data,target,0.2)
        score3 = select_model(model,data,target,0.3)
        # 主要想看的是 平均分 和 标准差
        nd = np.array([score1,score2,score3])
        print('平均分:%f 标准差:%f'%(nd.mean(),nd.std()))
        print('\n')

调用函数

select_model2([knn,lgc,dtree,gnb,svc],data,target)

KNeighborsClassifier:0.9047619047619048
KNeighborsClassifier:0.8333333333333334
KNeighborsClassifier:0.9206349206349206
平均分:0.886243 标准差:0.037970


LogisticRegression:1.0
LogisticRegression:0.9523809523809523
LogisticRegression:0.9047619047619048
平均分:0.952381 标准差:0.038881


DecisionTreeClassifier:0.9523809523809523
DecisionTreeClassifier:0.9047619047619048
DecisionTreeClassifier:0.8888888888888888
平均分:0.915344 标准差:0.026979


GaussianNB:0.8095238095238095
GaussianNB:0.8571428571428571
GaussianNB:0.9047619047619048
平均分:0.857143 标准差:0.038881


SVC:0.9523809523809523
SVC:0.8571428571428571
SVC:0.873015873015873
平均分:0.894180 标准差:0.041661

3)

4)

5)

6)

六、

1)

2)

3)

4)

5)

6)

七、

1)

2)

3)

4)

5)

6)

1、

2、

3、

4、

5、

6、

7、

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值