葡萄酒质量检测

#导入葡萄酒数据集
from sklearn.datasets import load_wine
#导入交叉验证工具
from sklearn.model_selection import cross_val_score
#导入用于分类的支持向量机模型
from sklearn.svm import SVC
#载入葡萄酒数据集
wine = load_wine()
#设置SVC的核函数为linear
svc = SVC(kernel='linear')
#使用交叉验证法对SVC进行评分
scores = cross_val_score(svc,wine.data,wine.target)
# print(scores)

#先导入了scikit_learn的交叉验证评分类,然后使用SVC对酒的数据集进行分类,默认情况下,cross_val_score会使用3个折叠,因此,会得到3个分数



#使用.mean() 获得分数的平均值
# print(scores.mean())# 交叉验证法平均分约为0.928分


#将数据集拆成6个部分来评分——cross_val_score:
#设置cv参数为6
scores = cross_val_score(svc,wine.data,wine.target,cv=6)
# print(scores)


# print(scores.mean())
#在sklearn中,cross_val_score对于分类模型默认使用的是K折叠交叉验证,而对于分类模型则默认使用分层K交叉验证法


#打印红酒数据集的分类标签
# print(wine.target)



#随机拆分原理——先从数据集中随机抽一部分数据作为训练集,再从其余的部分随机抽一部分作为测试集,进行评分后再迭代,重复上一步操作,直到把我们希望的迭代次数全跑完:
#导入随机拆分工具
from sklearn.model_selection import ShuffleSplit
#设置拆分的数为10个
shuffle_split = ShuffleSplit(test_size=.2,train_size=.7,n_splits=10)
#对拆分好的数据进行交叉验证
scores = cross_val_score(svc,wine.data,wine.target,cv=shuffle_split)
# print(scores)
#把每次迭代的测试集设为数据集的20%,而训练集为70%,并且把整个数据集拆分成10个子集,对SVC模型进行了10次评分,最终得分即10个评分的平均值




#导入LeaveOneOut
from sklearn.model_selection import LeaveOneOut
#设置cv参数为leaveoneout
cv = LeaveOneOut()
#重新进行交叉验证
scores = cross_val_score(svc,wine.data,wine.target,cv=cv)
# print('迭代次数:',len(scores))
# print('平均分:',scores.mean())





#使用网格搜索优化模型参数:
'''
用lasso算法为例:

在Lasso算法中,有两个参数比较重要——正则化参数alpha,最大迭代次数max_iter

默认情况下alpha=1.0,max_iter=1000

假设,想试试当alpha分别取10.0 1.0 0.1 0.01这4个数值,而max_iter 分别取 100 1000 5000 10000时,模型表现有什么差别

如果按照手动调整的话,试16次。。。
'''
#导入套索回归模型
from sklearn.linear_model import Lasso
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,random_state = 38)
#设置初始分数为0
best_score = 0
#设置alpha的参数遍历0.01,0.1,1,10
for alpha in [0.01,0.1,1,10]:
    #最大迭代数遍历100,1000,5000,10000
    for max_iter in [100,1000,5000,10000]:
        lasso = Lasso(alpha=alpha,max_iter=max_iter)
        #训练套索回归模型
        lasso.fit(X_train,y_train)
        score = lasso.score(X_test,y_test)
        #令最佳分数为所有分数中的最高值
        if score >best_score:
            best_score = score
            #定义字典,返回最佳参数和最佳迭代数
            best_parameters={'alpha':alpha,'最大迭代数':max_iter}
# print('最高分:',best_score)
# print('最佳参数设置',best_parameters)
#缺点:所进行的16次评分都是基于同一个训练集和测试集,这只能代表模型在该训练集和测试集的得分情况,不能反映出新的数据集的情况。




#与交叉验证结合的网格搜索:
#导入numpy
import numpy as np
#设置alpha的参数遍历0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
    #最大迭代数遍历100,1000,5000,10000
    for max_iter in [100,1000,5000,10000]:
        lasso = Lasso(alpha=alpha,max_iter=max_iter)
        scores = cross_val_score(lasso,X_train,y_train,cv=6)
        score = np.mean(scores)
        #令最佳分数为所有分数中的最高值
        if score >best_score:
            best_score = score
            #定义字典,返回最佳参数和最佳迭代数
            best_parameters={'alpha':alpha,'最大迭代数':max_iter}
# print('最高分:',best_score)
# print('最佳参数设置',best_parameters)



#在sklearn中,内置了一个类,GridSearchCV:
#导入网格搜索工具
from sklearn.model_selection import GridSearchCV
#将需要遍历的参数定义为字典
params = {'alpha':[0.01,0.1,1.0,10.0],'max_iter':[100,1000,5000,10000]}
#定义网格搜索中使用的模型和参数
grid_search = GridSearchCV(lasso,params,cv=6)
#使用网格搜索模型拟合数据
grid_search.fit(X_train,y_train)
# print('模型最高分:',grid_search.score(X_test,y_test))
# print('最优参数:',grid_search.best_params_)

#GridSearchCV中的best_scores_ 属性,会存储模型在交叉验证中所得的最高分
#打印网格搜索中的best_score_属性
# print('交叉验证最高分:',grid_search.best_score_)



#导入数据集生成工具
from sklearn.datasets import make_blobs
#导入画图工具
import matplotlib.pyplot as plt
#生成样本数为200,分类为2,标准差为5的数据集
X,y = make_blobs(n_samples=200,random_state=1,centers=2,cluster_std =5)
#绘制散点图
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.cool,edgecolor='k')
# plt.show()







#导入高斯贝叶斯模型
from sklearn.naive_bayes import GaussianNB
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=68)
#训练高斯贝叶斯模型
gnb = GaussianNB()
gnb.fit(X_train,y_train)
#获得高斯贝叶斯的分类准确概率
predict_proba = gnb.predict_proba(X_test)
# print('预测准确率形态:',predict_proba.shape)
#打印准确概率的前5个
# print(predict_proba[:5])




#导入SVC模型
from sklearn.svm import SVC
#使用训练集训练模型
svc = SVC().fit(X_train,y_train)
#获得SVC的决定系数
dec_func = svc.decision_function(X_test)
#打印决定系数中的前5个
# print(dec_func[:5])










#设定横纵轴范围
x_min,x_max= X[:,0].min()-.5,X[:,0].max()+.5
y_min,y_max= X[:,1].min()-.5,X[:,1].max()+.5
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.2),np.arange(y_min,y_max,0.2))
Z = gnb.predict_proba(np.c_[xx.ravel(),yy.ravel()])[:,1]
Z = Z.reshape(xx.shape)
#绘制等高线
plt.contourf(xx,yy,Z,cmap=plt.cm.summer,alpha=.8)
#绘制散点图
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=plt.cm.cool,edgecolor='k')
plt.scatter(X_test[:,0],X_test[:,1],c=y_test,cmap=plt.cm.cool,edgecolor='k',alpha=0.6)
#设置横纵轴范围
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
#设置横纵轴的单位
plt.xticks(())
plt.yticks(())
plt.show()


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值