目录

前言

一、实验目的

二、实验环境

三、实验内容与结果

1、SVM(support vector Machine)是什么?

2、SVM能干什么?

3、SVM如何实现?

4、独热编码:独热编码(One-Hot Encoding) – 知乎

5、随机森林算法的基本原理

四、模型构建

1、读入数据

2、数据初始化

3、训练模型,评价分类器性能

4、将数据集拆分为训练集和测试集,在测试集上查看分类效果

5、数据处理

总结



前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、实验目的

  1. 掌握机器学习建模分析
  2. 掌握回归分析、分类分析、聚类分析、降维等
  3. 了解各分类器之间的差异

二、实验环境

  1. 操作系统:Windows
  2. 应用软件:anaconda jupyter

三、实验内容与结果

1、SVM(support vector Machine)是什么?

支持向量机是基于数学优化方法的分类学习算法

• 通过使用最大分类间隔(Margin)来确定最优的最优的划分超平面,以获得良好的泛化能力

• 通过核函数的方法将低维数据映射到高维空间,并使得在高维空间的数据是线性可分的,从而能够处理低维空间中线性不可分的情况

具体理解可参考以下链接:[白话解析] 深入浅出支持向量机(SVM)之核函数 – 腾讯云开发者社区-腾讯云

2、SVM能干什么?

• SVM最基本的应用:分类

•求解一个最优的分类面,将数据集分割为两个的子集

•数据集在低维空间中无法使用超平面划分

•映射到高维空间,寻找超平面分割

3、SVM如何实现?

SVM采用核函数(Kernel Function)将低维数据映射到高维空间

•多种核函数,适应不同特性的数据集,影响SVM分类性能的关键因素
•常用的核函数:线性核、多项式核、高斯核和sigmoid核等

4、独热编码:独热编码(One-Hot Encoding) – 知乎

可以大概这么理解:平等地位的就独热编码,有大小顺序的就标签编码;

其实严格来说性别也应该独热编码,因为他们是平等的。

5、随机森林算法的基本原理

核心思想是“三个臭皮匠,顶个诸葛亮”

• 通过随机的方式建立一个森林
• 每棵树都是由从训练集中抽取的部分样本,且基于部分随机选择的特征子集训练构建
• 预测未知数据时,多个决策树投票决定最终结果:如果是数值形的输出,则采取多个决策树结果的平均或者加权作为最终输出;如果是分类任务,则采取投票机制或者是加权作为最终输出。

四、模型构建

例题

1.使用scikit-learn建立SVM模型为葡萄酒数据集构造分类器(分类结果为’good’或‘not’ ) [“不可使用quantity”列]

2.评估分类器在此数据集上的分类性能* 需要划分训练集和测试集

1、读入数据

原始数据共有3899条。

代码如下:

import pandas as pdfilename='data\wine.csv'data=pd.read_csv(filename,index_col='idx')data.loc[data['good_or_not']=='good','good_or_not']=1data.loc[data['good_or_not']=='not','good_or_not']=0data.drop('quality',axis=1,inplace=True)print(data[0:5])

2、数据初始化

代码如下(示例):

from sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.preprocessing import MinMaxScalerx = data.drop('good_or_not', axis=1).values.astype(float)y = data['good_or_not'].values.astype(float)print(type(x),type(y))

3、训练模型,评价分类器性能

from sklearn import svmclf = svm.SVC(kernel='rbf', gamma=0.6,C=100)clf.fit(x,y)print('Accuracy = ', clf.score(x, y))y_pred = clf.predict(x)from sklearn import metricsprint(metrics.classification_report( y, y_pred) )

4、将数据集拆分为训练集和测试集,在测试集上查看分类效果

from sklearn import svmfrom sklearn import model_selectionx_train, x_test,y_train, y_test = model_selection.train_test_split(x, y, test_size=0.2,random_state=1)clf = svm.SVC(kernel='rbf',gamma=0.7, C=1)clf.fit(x_train, y_train)b = clf.score(x_train, y_train)print("训练集准确率:",b)a = clf.score(x_test, y_test)print("测试集准确率:",a)

5、数据处理

from sklearn import preprocessingfrom sklearn import model_selection% 对不同方差的数据标准化x_scale = preprocessing.scale(x)%将标准化后的数据集拆分为训练集和测试集,在测试集上查看分类效果from sklearn import svmx_train, x_test,y_train, y_test = model_selection.train_test_split(x_scale, y, test_size=0.2,random_state=1)clf = svm.SVC(kernel='rbf',gamma=0.7, C=30)clf.fit(x_train, y_train)y_pred = clf.predict(x_test)a = clf.score(x_test, y_test)print(a)print(metrics.classification_report(y_test, y_pred))print(metrics.confusion_matrix(y_test, y_pred))


3.使用scikit-learn建立随机森林回归模型预测葡萄酒质量(1-10之间)[“不可使用good_or_not”列]

step 1. 从文件中读入数据,进行预处理,将所有特征转换为数值型

import numpy as npimport pandas as pdfilename='data\wine.csv'data=pd.read_csv(filename,index_col='idx')data.drop('good_or_not',axis=1,inplace=True)x = data.drop('quality', axis=1).values.astype(float)y = data['quality'].values.astype(float)

step 2. 从DataFrame对象中取出特征矩阵X和分类标签y,无需进行归一化处理

%划分测试集和训练集from sklearn import model_selectionx_train, x_test, y_train, y_test = model_selection.train_test_split(x,y, test_size=0.3, random_state=1)

step 3. 使用随机森林算法训练集成分类器

参数n_ estimators和max_depth的设置直接影响模型的性能

且不同的数据集取值差别较大,通常通过搜索的方式找出合适的值

from sklearn.ensemble import RandomForestClassifier%固定决策树个数,搜索最大深度max_depth在给定范围内的最优取值%从1到10中探索最优深度d_score = []for i in range(1,10):RF = RandomForestClassifier(n_estimators=15, criterion='entropy', max_depth=i)RF.fit(x_train, y_train)d_score.append(RF.score(x_test, y_test))depth = d_score.index(max(d_score)) #列表求最大值的索引print(depth,d_score[depth])

% 按最优深度,搜索最优决策树个树n_estimators% 从1到21中探索最优决策树的数目e_score = []for i in range(1,21):RF = RandomForestClassifier(n_estimators=i, criterion='entropy', max_depth=depth)RF.fit(x_train, y_train)e_score.append(RF.score(x_test, y_test))est = e_score.index(max(e_score))print(est,e_score[est])

%双层搜索scores = [] % 记录深度pos = [] %记录决策树数目for i in range(1, 10): %深度temp = [] for j in range(1, 40): % 决策树数目RF = RandomForestClassifier(n_estimators=j, criterion='entropy', max_depth=i)RF.fit(x_train, y_train)temp.append(RF.score(x_test, y_test))scores.append(max(temp))% 存储这21个中表现最好的模型的scorespos.append(temp.index(max(temp))) % 存储表现最好的模型的决策树数目max_scores = max(scores) % 找出每种深度下的所有模型的最好模型si = scores.index(max(scores)) % 该最好模型对应的决策树的数目depth = pos[si]print(max_scores, depth)

总结

以上就是今天要讲的内容,本文仅仅简单介绍了使用SVM模型对葡萄酒的数据进行回归分析的使用,SVM的算法添加了限制条件,来保证尽可能减少不可分割的点的影响,使分割达到相对最优。