这段时间,自己学习了一些有关机器学习的算法,现在拿鸢尾花分类来对这四种进行巩固与回顾。
这些算法都是直接使用的skearn库的算法,并未自己编写。
鸢尾花的降维
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
data = load_iris()
y = data.target
X = data.data
pca = PCA(n_components=2)
reduced_X = pca.fit_transform(X)
red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []
for i in range(len(reduced_X)):
if y[i] == 0:
red_x.append(reduced_X[i][0])
red_y.append(reduced_X[i][1])
elif y[i] == 1:
blue_x.append(reduced_X[i][0])
blue_y.append(reduced_X[i][1])
else:
green_x.append(reduced_X[i][0])
green_y.append(reduced_X[i][1])
plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()
经过降维后,将其进行数据可视化,可以明显的看出他的类别。
在开始前,先将所需要的包导入进来,代码如下:
from sklearn import datasets # 数据集的库
from sklearn import model_selection
from sklearn import svm
from sklearn.naive_bayes import GaussianNB
from sklearn.cluster import KMeans
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
1.鸢尾花svm分类
iris = datasets.load_iris() #从datasets导入鸢尾花数据集
X = iris.data
y = iris.target
# 将原始数据集划分成训练集和测试集
x=X[:,0:2] #在 X中取前两列作为特征(为了后期的可视化画图更加直观,故只取前两列特征值向量进行训练)
x_train,x_test,y_train,y_test=model_selection.train_test_split(X,y,random_state=1,test_size=0.3)
# 搭建模型,训练SVM分类器
classifier=svm.SVC(kernel='rbf',gamma=0.1,decision_function_shape='ovo',C=0.8)
#开始训练
classifier.fit(x_train,y_train.ravel())
# 计算svm分类器的准确率
print('SVM-输出训练集的准确率为: %.2f' % classifier.score(x_train, y_train))
print('SVM-输出测试集的准确率为 %.2f' % classifier.score(x_test, y_test))
可以得到训练集与测试集的训练准确率。
2.鸢尾花线性回归
iris = datasets.load_iris()
#获取花瓣的长和宽
x = [n[0] for n in iris.data]
y = [n[1] for n in iris.data]
import numpy as np #转换成数组
x = np.array(x).reshape(len(x),1)
y = np.array(y).reshape(len(y),1)
#第二步 导入Sklearn机器学习扩展包中线性回归模型,然后进行训练和预测
classifier = LinearRegression()
# 开始训练
classifier.fit(x,y)
# 预测
pre = classifier.predict(x)
#第三步 画图
plt.scatter(x,y,s=100)
plt.plot(x,pre,"r-",linewidth=4)
#花萼的长宽
plt.xlabel('calycinal length')
plt.ylabel('calycinall width')
for idx, m in enumerate(x):
plt.plot([m,m],[y[idx],pre[idx]], 'g-')
plt.show()
# 做预测,花萼长度为5.0,预测花萼宽度是多少
print ('[线性回归]花萼长度为5.0,预测花萼宽度是',classifier.predict([[5.0]]))
得到的结果如下图:
3.鸢尾花k-means聚类
#1.获取数据集
iris = datasets.load_iris()
# 2.取特征空间中的4个维度
X = iris.data[:, :4]
# 3.搭建模型,构造KMeans聚类器
estimator = KMeans(n_clusters=3)
#开始聚类训练
estimator.fit(X)
# 获取聚类标签
label_pred = estimator.labels_
# 绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()
# 绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2')
#花瓣的长宽
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()
4.鸢尾花朴素贝叶斯
X = iris.data
y = iris.target
# 2.将原始数据集划分成训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y,test_size=0.3, random_state=1)
# 3.搭建模型,训练高斯贝叶斯分类器
classifier = GaussianNB()
#开始训练
classifier.fit(X_train, y_train)
# 4.计算svm分类器的准确率
print('高斯贝叶斯输出训练集的准确率为: %.2f' % classifier.score(X_train, y_train))
print('高斯贝叶斯输出测试集的准确率为: %.2f' % classifier.score(X_test, y_test))