【数据仓库与数据挖掘】分类分析练习

分类分析练习要求
1.给定数据文件input.csv,各属性说明见图片文件。
2.请使用自己熟悉的、合适的算法进行建模,并对结果进行分析与可视化。
3.使用多种评估指标对不同算法建立的模型比较与评价。
4.代码要尽可能多加注释,最后导出为html文件提交。

0- 准备工作

#0
#导入所需要的库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import LabelEncoder
%matplotlib inline
from collections import Counter
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from pandas import read_csv
from matplotlib import pyplot
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
import warnings

1- 数据简单查看

#1
#1.1 读取数据,使用input.csv,查看数据
data = pd.read_csv(r"C:\Users\Desktop\input.csv",index_col=0)
data.head()
#可以观察到,在分类中,分类需要离散型变量,连续型变量要进行转换,所以要进行数据的处理工作,对transaction_amt处理

#1.2 查看数据形状和信息
print(data.shape) #观察结果是10000行,10列
print(data.info()) #数据完整,没有缺失

#1.3 来处理最后一列transaction_amt
data_label=data.iloc[:,0:1]
data_label = LabelEncoder().fit_transform(np.array(data_label).ravel())
data_feature=data.iloc[:,2:]
transaction_amt=np.array(data_feature['transaction_amt'])
for i in range(len(transaction_amt)): #对于小于等于1000的编码为0,小于等于2000的编码为1,其他的编码为2
    if transaction_amt[i]<=1000:
        transaction_amt[i]=0
    elif transaction_amt[i]<=2000:
        transaction_amt[i]=1
    else:
        transaction_amt[i]=2
transaction_amt #编码后的结果
print(Counter(transaction_amt)) #对于0、1、2编码的统计结果,加和是对的

2- 分训练集和测试集

#2 
#对于处理后的结果分训练集train和测试集test(参考:百度搜索)
data_feature=data_feature.drop(['transaction_amt'],axis=1)
data_feature_dum=pd.get_dummies(data_feature,sparse=True)
data_feature_dum['transaction_amt']=transaction_amt
x_train, x_test, y_train, y_test = train_test_split(data_feature_dum, data_label, random_state=0)

3- 不同模型比较

#3
#使用6种不同分类算法进行比较,参考网址
#①LR:逻辑回归 ②线性判别分析 ③K近邻 ④分类和回归树 ⑤朴素贝叶斯 ⑥SVM支持向量机
models = []
models.append(('LR', LogisticRegression())) #逻辑回归
models.append(('LDA', LinearDiscriminantAnalysis())) #线性判别分析
models.append(('KNN', KNeighborsClassifier())) #K近邻
models.append(('CART', DecisionTreeClassifier())) #分类和回归树
models.append(('NB', GaussianNB())) #朴素贝叶斯
models.append(('SVM', SVC())) #支持向量机
# 循环评估每个分类模型
results = []
names = []
scoring = 'accuracy'
for name, model in models:
    kfold = KFold(n_splits=10, random_state=7)
    cv_results = cross_val_score(model, x_test, y_test, cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()) #打印出每种算法在该数据集上的平均准确度和标准偏差
    print(msg)

结果:
LR: 0.726240 (0.007796)
LDA: 0.474800 (0.012156)
KNN: 0.794320 (0.005162)
CART: 0.814000 (0.006362)
NB: 0.406120 (0.023181)
SVM: 0.726160 (0.007882)

# 箱线图的比较,将上述指标通过箱线图可视化出来
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(names)
pyplot.show()
# 通过可视化结果,可以看出这六个模型最好的两个是KNN和决策树CART,能够较好地解决本分类问题的两种算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值