机器学习入门demo(鸢尾花案例)

参考网上的多例,自己动手实践了一下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
from pandas import DataFrame
import mglearn
from sklearn.neighbors import KNeighborsClassifier

#以鸢尾花数据集来测试,这个数据集包含在scikit-learn的datasets模块中,可以调用load_iris函数来加载数据。
iris_dataset = load_iris()

#load_iris()返回的是一个Bunch对象,与字典非常相似,里面包含键和值
print("Keys of iris_dataset:\n{}".format(iris_dataset.keys()))

#DESCR这个键对应的值是数据集的简要说明
print(iris_dataset['DESCR'][:200]+"\n...")

print(iris_dataset)

#scikit-learn中的数据通常用大写X表示,而标签用小写y表示。
#scikit-learn中的train_test_split函数可以打乱数据集,并进行拆分。这个函数将75%的行数据及对应标签作为训练集,剩下的25%数据集及其标签作为测试集。
#对数据进行拆分前,用train_test_split函数利用伪随机数生成器将数据集打乱。因为如果将最后25%的数据作为测试集,那么所有数据点的
#标签都是2(因为数据点是按顺序排的),所以打乱顺序确保测试集包含所有类别数据。
X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['tarhget'], random_state=3   #random_state的值是随意写的,该属性只是用来保证每次训练时对数据进行打乱时。打乱的规则是一样的,相当于把随机数种子写固定了,产生的随机数每次都是一样的。
)
#train_test_split函数的输出为X_train、X_test、y_train、y_test。X_train包含75%的行数据,X_test包含剩下25%。这个比例也可以自己设定。
print("X_train:"+str(X_train))
print("X_test:"+str(X_test))
print("y_train:"+str(y_train))
print("y_test:"+str(y_test))


#训练集
print("X_train shape:{}".format(X_train.shape))
print("y_train shape:{}".format(y_train.shape))

#测试集
print("X_test shape:{}".format(X_test.shape))
print("y_test shape:{}".format(y_test.shape))

#输出结果
#X_train shape:(112, 4)       150*75%=112   表示二维数组,共有112个数组元素,每个数组中包含4个元素
#y_train shape:(112,)         表示该数组是一维数组,包含112个元素
#X_test shape:(38, 4)         150-112=38
#y_test shape:(38,)

#利用X_train中的数据创建DataFrme
#利用iris_dataset.feature_names中的字符串对数据列进行标记
#iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)

#使用k临近分类算法对数据做预测
"""
k临近算法中k的含义是,我们可以考虑训练集中与新数据点最近的任意个k邻居(比如说距离最近的3个或5个邻居,而不是只考虑最近的一个)
然后我们可以用这些邻居中数量最多的类别做出预测。K邻近分类算法是在neighbors模块的KNeighborsClassfier类中实现的。
我们需要将这个类实例化为一个对象,然后才能使用这个模型。这时我们需要设置模型的参数。
"""
knn = KNeighborsClassifier(n_neighbors=1)    #邻居数量(默认为调用构造器时设定的n_neighbors的值)

"""
knn对象对算法进行了封装,既包括训练数据构建模型的算法,也包括对新数据点进行预测算法。它好包括算法从训练数据中提取的信息。对于KNeighborsClassfier来说,
里面只保存了训练集。想要基于训练集来构建模型,需要调用knn对象的fit方法,输入参数为X_train和y_train,二者都是数组,前者包含训练数据,后者包含相应的训练标签。
"""
a = knn.fit(X_train, y_train)
#fit方法返回的是knn对象本身并作原处修改,因此我们得到了分类器的字符串表示。从中我们可以看出构建模型时用到的参数,几乎所有的参数都是默认值,n_neighbors=1是我们传入的参数。
print(a)

#给出两组测试值
X_new = np.array([5.8, 2.8, 5.1, 2.4], [4.6, 3.2, 1.4, 0.2])
#调用knn对象的predict方法来预测
prediction = knn.predict(X_new)

print("Prediction{}".format(prediction))   #多组测试值,得到的结果放到数组中
print("Prediction target name:{}".format(
    iris_dataset['target_names'][prediction]
))

print('正确率:{:2.2f}%'.format(100*knn.score(X_test, y_test)))

如果遇到anaconda中没有的第三方库,需要自己Install一下。

猜你喜欢

转载自blog.csdn.net/QYHuiiQ/article/details/97615757
今日推荐