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

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

一、模型总结

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、

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值