机器学习:wine 分类

数据来源:http://archive.ics.uci.edu/ml/datasets/Wine

参考文献:《机器学习Python实战》魏贞原

博文目的:复习

工具:Geany

#导入类库

from pandas import read_csv                                    #读数据
from pandas.plotting import scatter_matrix            #画散点图
from pandas import set_option                                #设置打印数据精确度

import numpy as np

import matplotlib.pyplot as plt                                #画图

from sklearn.preprocessing import Normalizer            #数据预处理:归一化
from sklearn.preprocessing import StandardScaler     #数据预处理:正态化

from sklearn.preprocessing import MinMaxScaler      #数据预处理:调整数据尺度

from sklearn.model_selection import train_test_split        #分离数据集
from sklearn.model_selection import cross_val_score       #计算算法准确度
from sklearn.model_selection import KFold                        #交叉验证
from sklearn.model_selection import GridSearchCV        #机器学习算法的参数优化方法:网格优化法

from sklearn.linear_model import LinearRegression        #线性回归
from sklearn.linear_model import Lasso                           #套索回归
from sklearn.linear_model import ElasticNet                    #弹性网络回归
from sklearn.linear_model import LogisticRegression     #逻辑回归算法

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis            #线性判别分析
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis      #二次判别分析
from sklearn.tree import DecisionTreeRegressor        #决策树回归                                       
from sklearn.tree import DecisionTreeClassifier         #决策树分类

from sklearn.neighbors import KNeighborsRegressor    #KNN回归

from sklearn.neighbors import KNeighborsClassifier        #KNN分类

from sklearn.naive_bayes import GaussianNB    #贝叶斯分类器

from sklearn.svm import SVR    #支持向量机 回归
from sklearn.svm import SVC    #支持向量机 分类

from sklearn.pipeline import Pipeline    #pipeline能够将从数据转换到评估模型的整个机器学习流程进行自动化处理

from sklearn.ensemble import RandomForestRegressor        #随即森林回归
from sklearn.ensemble import RandomForestClassifier        #随即森林分类
from sklearn.ensemble import GradientBoostingRegressor    #随即梯度上升回归
from sklearn.ensemble import GradientBoostingClassifier    #随机梯度上分类
from sklearn.ensemble import ExtraTreesRegressor        #极端树回归
from sklearn.ensemble import ExtraTreesClassifier        #极端树分类
from sklearn.ensemble import AdaBoostRegressor        #AdaBoost回归
from sklearn.ensemble import AdaBoostClassifier        #AdaBoost分类

from sklearn.metrics import mean_squared_error        #
from sklearn.metrics import accuracy_score                #分类准确率

from sklearn.metrics import confusion_matrix        #混淆矩阵

from sklearn.metrics import classification_report    #分类报告

#导入数据
filename = 'wine.csv'
data = read_csv(filename, header=None, delimiter=',')
#数据理解
print(data.shape)
#print(data.dtypes)
#print(data.corr(method='pearson'))
#print(data.describe())
#print(data.groupby(0).size())


#数据可视化:直方图、散点图、密度图、关系矩阵图

#直方图

#data.hist()
#plt.show()

#密度图

#data.plot(kind='density', subplots=True, layout=(4,4), sharex=False, sharey=False)
#plt.show()

#散点图

#scatter_matrix(data)
#plt.show()

#关系矩阵图

#fig = plt.figure()
#ax = fig.add_subplot(111)
#cax = ax.matshow(data.corr(), vmin=-1, vmax=1)
#fig.colorbar(cax)
#plt.show()

#数据处理:调整数据尺度、归一化、正态化、二值化
array = data.values
X = array[:, 1:14].astype(float)
Y = array[:,0]

scaler = MinMaxScaler(feature_range=(0,1)).fit(X)
X_m = scaler.transform(X)

scaler = Normalizer().fit(X)
X_n = scaler.transform(X)

scaler = StandardScaler().fit(X)
X_s = scaler.transform(X)

#分离数据集
validation_size = 0.2
seed = 7

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)

X_m_train, X_m_test, Y_m_train, Y_m_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)

X_n_train, X_n_test, Y_n_train, Y_n_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)

X_s_train, X_s_test, Y_s_train, Y_s_test = train_test_split(X, Y, test_size=validation_size, random_state=seed)

#选择模型:(本例是一个分类问题)
#非线性:KNN, SVC, CART, GaussianNB,
#线性:KNN, SVR, LR, Lasso, ElasticNet,  LDA,
models = {}
models['KNN'] = KNeighborsClassifier()
models['SVM'] = SVC()
models['CART'] = DecisionTreeClassifier()
models['GN'] = GaussianNB()
#models['LR'] = LinearRegression()
#models['Lasso'] = Lasso()
#models['EN'] = ElasticNet()
models['LDA'] = LinearDiscriminantAnalysis()
models['QDA'] = QuadraticDiscriminantAnalysis()

#评估模型
scoring = 'accuracy'
num_folds = 10
seed = 7

results = []
for key in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results =cross_val_score(models[key], X_train, Y_train, scoring=scoring, cv=kfold)
    results.append(cv_results)
    print('%s %f(%f)'%(key, cv_results.mean(), cv_results.std()))

results_m = []
for key in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results_m =cross_val_score(models[key], X_m_train, Y_m_train, scoring=scoring, cv=kfold)
    results_m.append(cv_results_m)
    print('调整数据尺度:%s %f(%f)'%(key, cv_results_m.mean(), cv_results_m.std()))

results_n = []
for key in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results_n =cross_val_score(models[key], X_n_train, Y_n_train, scoring=scoring, cv=kfold)
    results_n.append(cv_results_n)
    print('归一化数据:%s %f(%f)'%(key, cv_results_n.mean(), cv_results_n.std()))

results_s = []
for key in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results_s =cross_val_score(models[key], X_s_train, Y_s_train, scoring=scoring, cv=kfold)
    results_s.append(cv_results_s)
    print('正态化数据:%s %f(%f)'%(key, cv_results_s.mean(), cv_results_s.std()))
#箱线图

#算法优化:LDA
param_grid = {'solver':['svd', 'lsqr', 'eigen']}
model = LinearDiscriminantAnalysis()
kfold = KFold(n_splits=num_folds, random_state=seed)
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring=scoring, cv=kfold)
grid_result = grid.fit(X=X_train, y=Y_train)
print('最优:%s 使用:%s'%(grid_result.best_score_, grid_result.best_params_))
cv_results = zip(grid_result.cv_results_['mean_test_score'], grid_result.cv_results_['std_test_score'], grid_result.cv_results_['params'])
for mean, std, params in cv_results:
    print('%f(%f) with %r'%(mean, std, params))

#算法集成
#bagging: 随机森林,极限树;
#boosting:ada, 随机梯度上升
ensembles = {}
ensembles['RF'] = RandomForestClassifier()
ensembles['ET'] = ExtraTreesClassifier()
ensembles['ADA'] = AdaBoostClassifier()
ensembles['GBM'] = GradientBoostingClassifier()

results = []
for key in ensembles:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results =cross_val_score(ensembles[key], X_train, Y_train, scoring=scoring, cv=kfold)
    results.append(cv_results)
    print('%s %f(%f)'%(key, cv_results.mean(), cv_results.std()))

#集成算法调参gbm
param_grid = {'n_estimators':[10,50,100,200,300,400,500,600,700,800,900]}
model = GradientBoostingClassifier()
kfold = KFold(n_splits=num_folds, random_state=seed)
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=kfold, scoring=scoring)
grid_result = grid.fit(X=X_train, y=Y_train)
print('最优:%s 使用:%s'%(grid_result.best_score_, grid_result.best_params_))
cv_results = zip(grid_result.cv_results_['mean_test_score'], grid_result.cv_results_['std_test_score'], grid_result.cv_results_['params'])
for mean, std, params in cv_results:
    print('%f(%f) with %r'%(mean, std, params))

#训练最终模型
model = LinearDiscriminantAnalysis(solver='svd')
model.fit(X=X_train, y=Y_train)

#评估最终模型
predictions = model.predict(X_test)
print(accuracy_score(Y_test, predictions))
print(confusion_matrix(Y_test, predictions))
print(classification_report(Y_test, predictions))

原文地址:http://blog.51cto.com/13542337/2057902

时间: 2024-08-29 09:26:13

机器学习:wine 分类的相关文章

机器学习——非均衡分类问题

在机器学习的分类问题中,我们都假设所有类别的分类代价是一样的.但是事实上,不同分类的代价是不一样的,比如我们通过一个用于检测患病的系统来检测马匹是否能继续存活,如果我们把能存活的马匹检测成患病,那么这匹马可能就会被执行安乐死:如果我们把不能存活的马匹检测成健康,那么就会继续喂养这匹马.一个代价是错杀一只昂贵的动物,一个代价是继续喂养,很明显这两个代价是不一样的.

机器学习中分类与聚类的本质区别

机器学习中分类与聚类的本质区别 机器学习中有两类的大问题,一个是分类,一个是聚类. 在我们的生活中,我们常常没有过多的去区分这两个概念,觉得聚类就是分类,分类也差不多就是聚类,下面,我们就具体来研究下分类与聚类之间在数据挖掘中本质的区别. 分类 分类有如下几种说法,但表达的意思是相同的. 分类(classification):分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y中. 分类是根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种目标函数),使它

0、机器学习算法分类

1.机器学习算法分类: 监督学习监督学习的训练数据包含了类别信息,在监督学习中,典型的问题是分类(Classification)和回归(Regression),典型的算法有Logistics Regression .BP神经网络算法和相性回归算法. 监督学习流程: 无监督学习 与监督学习不同的是,无监督学习(Unsupervised Learning)的训练数据中不包含任何类别信息.在无监督学习中,其典型的问题为聚类(Clustering)问题,代表的算法有K-Means算法.DBSCAN算法等

机器学习基础 | 分类模型评估指标

目录 成对指标 综合指标 图形指标 在处理机器学习的分类问题中,我们需要评估分类结果的好坏以选择或者优化模型,本文总结二分类任务中常用的评估指标.对于多分类任务的评估指标,可以参考这篇文章 先从我们最熟知的混淆矩阵(confusion matrix)说起. source 鉴于混淆矩阵看着比较抽象,可以参考下图 常用的评估指标可以分为3类: 成对指标,包括正确率(精度)&错误率,Precision&Reall,TPR(Sentitivity)&TNR(Specificity)等; 综

机器学习算法分类

转自@王萌,有少许修改. 机器学习起源于人工智能,可以赋予计算机以传统编程所无法实现的能力,比如飞行器的自动驾驶.人脸识别.计算机视觉和数据挖掘等. 机器学习的算法很多.很多时候困惑人们的是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 将算法按照学习方式分类可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果. 监督学习  在监督学习中,输入数据被称为"训

机器学习之分类问题实战(基于UCI Bank Marketing Dataset)

导读: 分类问题是机器学习应用中的常见问题,而二分类问题是其中的典型,例如垃圾邮件的识别.本文基于UCI机器学习数据库中的银行营销数据集,从对数据集进行探索,数据预处理和特征工程,到学习模型的评估与选择,较为完整的展示了解决分类问题的大致流程.文中包含了一些常见问题的处理方式,例如缺失值的处理.非数值属性如何编码.如何使用过抽样和欠抽样的方法解决分类问题中正负样本不均衡的问题等等. 作者:llhthinker 欢迎转载,请保留原文链接:http://www.cnblogs.com/llhthin

机器学习算法分类及其评估指标

机器学习的入门,我们需要的一些基本概念: 机器学习的定义 M.Mitchell<机器学习>中的定义是: 对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习. 算法分类 两张图片很好的总结了(机器学习)的算法分类: 评估指标 分类(Classification)算法指标: Accuracy准确率 Precision精确率 Recall召回率 F1 score 对于分类问题的结果可以用下表表示(说明:True或者False

【简单认识】机器学习常见分类算法——朴素贝叶斯

贝叶斯在1763年,<机会学说中一个问题的解>中提出了贝叶斯定理. 生活中不乏分类,比如我们经常通过一些人的衣着,来下意识的区别某些人是杀马特亦或是文艺青年.我们是如何做出这些判断或者说是分类的呢?这些判断大多来自我们的“经验之谈”,即,我们首先脑海中会先存有“某类人通常会如何着装打扮”的概念,然后当遇到这类显著特征之后,便会下意识的对其进行分类. 那么如何让机器进行这种类似的判断区分呢? 朴素贝叶斯分类法是一种相对简单易理解的机器分类方法.它的思想是首先对一些已知分类的样本进行采样(机器学习

机器学习--模型分类--贝叶斯

朴素贝叶斯的“朴素”,并不是简单的意思,而是指样本的特征之间是相互独立的.在所有的机器学习分类算法中, 朴素贝叶斯和其他绝大部分分类算法都不同,其他分类算法基本都是判别方法,即直接学习出特征输出Y和特征向 量X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X),但是朴素贝叶斯却是生成方法,也就是直接找 出特征输出Y和特征向量X之间的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出.朴素贝叶斯的优点在于:1,有稳定的分类效率,2,对小规模数据表现很好,能处理多分