使用SVM进行Iris数据集的分类分析

版权申诉
0 下载量 129 浏览量 更新于2024-10-15 1 收藏 77KB ZIP 举报
资源摘要信息:"基于SVM实现Iris数据集分类" 知识点概述: 支持向量机(Support Vector Machine, SVM)是一种常见的监督学习方法,主要用于数据分类和回归分析。它通过寻找一个超平面来实现不同类别数据的分割,最优的超平面会使得不同类别之间的边界最大化。SVM在处理小样本数据时具有良好的泛化能力,因此在许多领域,如生物信息学、文本识别、图像识别等,SVM都得到了广泛的应用。 Iris数据集,又称鸢尾花数据集,是由著名统计学家罗纳德·费雪(Ronald Fisher)在1936年整理的。该数据集包含150个样本,每个样本具有四个属性:萼片长度、萼片宽度、花瓣长度和花瓣宽度,样本属于三个鸢尾花品种之一。由于其简单、分类问题明确,Iris数据集经常被用于机器学习和模式识别领域的教学和算法验证。 SVM Iris分类通常指的是使用SVM算法对Iris数据集中的样本进行分类。在这个过程中,算法需要从数据中学习出如何区分不同品种的鸢尾花。SVM Iris分类是机器学习中的一个经典案例,常用于教授SVM算法的应用。 详细知识点: 1. 支持向量机(SVM)原理: SVM的核心思想是找到一个超平面,将数据集中的不同类别分隔开,并使不同类别之间的间隔(margin)最大。在高维空间中,SVM通过核技巧(kernel trick)将数据映射到高维空间,在这个空间中寻找最优超平面。SVM可以解决线性可分问题,也可以通过引入软间隔和核函数来解决非线性可分问题。 2. SVM中的核函数: 核函数是SVM中处理非线性可分问题的重要工具。通过将原始数据映射到一个更高维的特征空间,核函数能够使得在新的空间中数据变得线性可分。常见的核函数包括线性核、多项式核、径向基函数(Radial Basis Function, RBF)核和sigmoid核。 3. SVM参数选择: 在使用SVM进行分类时,需要确定合适的参数,如正则化参数C、核函数的参数以及多分类策略。这些参数的选择对最终的分类性能有很大影响,通常通过交叉验证和网格搜索等方法来选择最优参数。 4. Iris数据集的特点: Iris数据集包含150个样本,每个样本的特征维度为4,分为3个类别。由于其样本数量适中且特征维度不高,它成为了研究分类问题的理想数据集。在使用SVM对Iris数据集进行分类时,可以清楚地展示出算法在小样本数据集上的分类效果。 5. SVM在Iris数据集上的应用: 使用SVM对Iris数据集进行分类时,首先需要对数据进行预处理,包括特征缩放、划分训练集和测试集等。然后通过选择合适的核函数和参数,构建SVM模型并进行训练。最后通过测试集评估模型的分类准确率。由于Iris数据集的三个类别之间存在一定的重叠,SVM的性能表现通常较好。 6. SVM的优缺点: SVM的优点包括泛化能力强、适用范围广、可以处理非线性问题等。缺点包括当样本量大时训练时间较长、需要选择合适的核函数和参数等。在处理Iris这种小样本数据集时,SVM的这些优点能够得到很好的体现。 综上所述,通过SVM对Iris数据集进行分类是一个学习和理解SVM算法的经典案例。掌握这个过程不仅有助于深入理解SVM算法,还能为解决实际问题提供有力的工具。

import pandas as pd data = pd.read_csv(C:\Users\Administrator\Desktop\pythonsjwj\weibo_senti_100k.csv') data = data.dropna(); data.shape data.head() import jieba data['data_cut'] = data['review'].apply(lambda x: list(jieba.cut(x))) data.head() with open('stopword.txt','r',encoding = 'utf-8') as f: stop = f.readlines() import re stop = [re.sub(' |\n|\ufeff','',r) for r in stop] data['data_after'] = [[i for i in s if i not in stop] for s in data['data_cut']] data.head() w = [] for i in data['data_after']: w.extend(i) num_data = pd.DataFrame(pd.Series(w).value_counts()) num_data['id'] = list(range(1,len(num_data)+1)) a = lambda x:list(num_data['id'][x]) data['vec'] = data['data_after'].apply(a) data.head() from wordcloud import WordCloud import matplotlib.pyplot as plt num_words = [''.join(i) for i in data['data_after']] num_words = ''.join(num_words) num_words= re.sub(' ','',num_words) num = pd.Series(jieba.lcut(num_words)).value_counts() wc_pic = WordCloud(background_color='white',font_path=r'C:\Windows\Fonts\simhei.ttf').fit_words(num) plt.figure(figsize=(10,10)) plt.imshow(wc_pic) plt.axis('off') plt.show() from sklearn.model_selection import train_test_split from keras.preprocessing import sequence maxlen = 128 vec_data = list(sequence.pad_sequences(data['vec'],maxlen=maxlen)) x,xt,y,yt = train_test_split(vec_data,data['label'],test_size = 0.2,random_state = 123) import numpy as np x = np.array(list(x)) y = np.array(list(y)) xt = np.array(list(xt)) yt = np.array(list(yt)) x=x[:2000,:] y=y[:2000] xt=xt[:500,:] yt=yt[:500] from sklearn.svm import SVC clf = SVC(C=1, kernel = 'linear') clf.fit(x,y) from sklearn.metrics import classification_report test_pre = clf.predict(xt) report = classification_report(yt,test_pre) print(report) from keras.optimizers import SGD, RMSprop, Adagrad from keras.utils import np_utils from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.layers.embeddings import Embedding from keras.layers.recurrent import LSTM, GRU model = Sequential() model.add(Embedding(len(num_data['id'])+1,256)) model.add(Dense(32, activation='sigmoid', input_dim=100)) model.add(LSTM(128)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.summary() import matplotlib.pyplot as plt import matplotlib.image as mpimg from keras.utils import plot_model plot_model(model,to_file='Lstm2.png',show_shapes=True) ls = mpimg.imread('Lstm2.png') plt.imshow(ls) plt.axis('off') plt.show() model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=["accuracy"]) model.fit(x,y,validation_data=(x,y),epochs=15)

2023-06-10 上传

import pandas as pd from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.feature_selection import SelectKBest, f_classif from sklearn.decomposition import PCA from sklearn.metrics import accuracy_score, classification_report from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score from sklearn.ensemble import RandomForestClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC data = load_wine() # 导入数据集 X = pd.DataFrame(data.data, columns=data.feature_names) y = pd.Series(data.target) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 构建分类模型 model = LogisticRegression() model.fit(X_train, y_train) # 预测测试集结果 y_pred = model.predict(X_test) #评估模型性能 accuracy = accuracy_score(y_test, y_pred) report = classification_report(y_test, y_pred) print('准确率:', accuracy) # 特征选择 selector = SelectKBest(f_classif, k=6) X_new = selector.fit_transform(X, y) print('所选特征:', selector.get_support()) # 模型降维 pca = PCA(n_components=2) X_new = pca.fit_transform(X_new) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=0) def Sf(model,X_train, X_test, y_train, y_test,modelname): mode = model() mode.fit(X_train, y_train) y_pred = mode.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(modelname, accuracy) importance = mode.feature_importances_ print(importance) def Sf1(model,X_train, X_test, y_train, y_test,modelname): mode = model() mode.fit(X_train, y_train) y_pred = mode.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(modelname, accuracy) modelname='支持向量机' Sf1(SVC,X_train, X_test, y_train, y_test,modelname) modelname='逻辑回归' Sf1(LogisticRegression,X_train, X_test, y_train, y_test,modelname) modelname='高斯朴素贝叶斯算法训练分类器' Sf1(GaussianNB,X_train, X_test, y_train, y_test,modelname) modelname='K近邻分类' Sf1(KNeighborsClassifier,X_train, X_test, y_train, y_test,modelname) modelname='决策树分类' Sf(DecisionTreeClassifier,X_train, X_test, y_train, y_test,modelname) modelname='随机森林分类' Sf(RandomForestClassifier,X_train, X_test, y_train, y_test,modelname)加一个画图展示

2023-06-09 上传