一.Scikit-Learn许多知名机器学习的算法实现的库
1.Scikit-Learn 包含,分类,聚类,回归,模型选择,特征处理,维度缩小几个大的功能模块,导入Sklearn模块
import sklearn
2.机器学习的步骤分析
#1.获取数据集
#2.数据基本的处理和分析(分析主要是找特征)
#3.特征工程
#4.机器学习
#5.模型评估
3.KNN算法的代码实现
#从sklearn的邻居中导入KNN分类算法
from sklearn.neighbors import KNeighborsClassifier
x=[[0],[1],[2],[-1]]
#训练集,用[]在外面括起,要训练的数据集使用[]再括起来,形如[[],[],[],[],[]]
y=['樱花','桃花','菊花','菊花'] #标签集,一一对应上述是什么种类
#训练KNN模型
estimator = KNeighborsClassifier(n_neighbors=2)
estimator.fit(x,y)
#用训练的估计器去预测()里的数据是哪一列的
res = estimator.predict([[-2],[-1.5],[-0.5]])
#列表里的【】数,这边预测要用[[],[],[]]框起来
print(res)
二.从sklearn中读取大数据和小数据
1.读取小数据集(sklearn下载时自带的测试数据集,一般就在本地),用load_数据名
from sklearn.datasets import load_iris,fetch_20newsgroups
#import后如果引用小数据集,就用load_数据名,大数据集的话就用fetch_数据名
#用from sklearn.datasets import load_*(*指的是数据名,上面代码的iris是指的鸢尾花的数据)
mini_data=load_iris()
print(mini_data)
2.读取大数据集要从网络上下载至本地然后读取,使用fetch_数据名
data_home是用来将数据下载在本地的位置,subset='train/test/all可选择要从网上下载的训练集,测试集或者全部,默认都下载全部数据集
big_data=fetch_20newsgroups(data_home='D:/',subset='train/test/all')
print(big_data)
3.sklearn查看读取的数据的各个细节
#load和fetch读取出的小数据集或者大数据集都是用字典格式,为了方便看数据,使用以下的方法读取具体的内容
print('iris的数据集的数据(就是特征值):/n',mini_data.data)
print('iris的target(标签名):/n',mini_data.target)
print('iris的各个特征值的名字(我觉得可以称之为列名)',mini_data.feature_names)
print('iris标签值(数据是怎么分类的):/n',mini_data.target_names)
print('iris的描述,数据分析里的那个discribe一样得:/n',mini_data.DESCR
三.将案例鸢尾花进行数据可视化
1.前面已经读取了鸢尾花的数据,为了更方便的观察,我们将它可视化
#先把数据由读取的字典型转换成DF
import pandas as pd
import matplotlib.pyplot as plt #serborn在matplotlib库下才可使用
import seaborn as sns #画图用的库,比matplotlib好看,好用
iris_data=pd.DataFrame(data=mini_data.data,columns=mini_data.feature_names)
iris_data['target']=mini_data.target #把标签加到这个DF后面,不需要赋值到新的DF,他直接在iris_data上进行修改
#sns.lmplot的使用不想细说,自己百度去,整理的很全,这个我也会用
def iris_plot(data,col1,col2):
sns.lmplot(x=col1,y=col2,data=data,hue='target',fit_reg=False)
plt.title('鸢尾花数据展示')#图像标题
plt.xlabel(col1)#x轴的注释
plt.ylabel(col2)#y轴的注释
plt.show()
# iris_plot(iris_data,'sepal length (cm)','petal length (cm)')
四.数据集中训练集和测试集的划分
1.机器学习一般的数据集会划分成两个部分
训练集:用来训练,构建模型
测试集:用于检验模型是否有效
2.一般划分比例为:
训练集:70%,80%,75%
测试集:30%,20%,25%
3.使用以下的代码进行划分训练集和测试集的操作
from sklearn.model_selection import train_test_split#在sklearn下的模型选择中导入训练测试集的划分这个库
#在划分数据集时输出的顺序严格遵守下面的顺序,训练集的特征值,测试集的特征值,训练集的标签值,测试集的标签值
训练集的特征值,测试集的特征值,训练集的标签值,测试集的标签值=train_test_split(mini_data.data,mini_data.target,test_size=0.2,random_state=22)
#train_test_split代码中的参数,(数据集特征部分的所有数据,数据集标签的全部数据,测试集的大小,此处是20%,随机种子(随便写即可))
# print(训练集的特征值,'\n',测试集的特征值,'\n',训练集的标签值,'\n',测试集的标签值)
# print(训练集的特征值.shape,'\n',测试集的特征值.shape,'\n',训练集的标签值.shape,'\n',测试集的标签值.shape)
五.特征预处理(归一化/标准化)
为什么要进行归一化或者标准化:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响目标结果,使训练结果出现较大偏差。
(一)归一化
1.归一化的定义
通过原始数据进行变换把数据映射到(默认[0,1))之间,计算过程参见我的手写笔记
2.代码实现归一化
#从sklearn中的准备(pre)导入归一化的库
from sklearn.preprocessing import MinMaxScaler
#实例化一个进行归一化操作的转换器
transfer=MinMaxScaler(feature_range=(0,1))
#调用这个归一化转换器
归一化数据=transfer.fit_transform(data[['col1,col2,col3']]) #数据是DF中你需要进行归一化的列。
使用归一化的注意点:注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁榛性较差,只适合传统精确小数据场景。
(二)标准化
#从sklearn中的准备(pre)导入标准化的库
from sklearn.preprocessing import StandardScaler
#实例化一个进行归一化操作的转换器
transfer=StandardScaler()
#调用这个标准化转换器
标准化数据=transfer.fit_transform(data[['col1,col2,col3']]) #数据是DF中你需要进行标准化的列。
六.鸢尾花数据的处理
from sklearn.datasets import load_iris
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
1.获取数据集
iris=load_iris()
2.数据基本的处理和分析(分析主要是找特征)
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.25,random_state=10)
3.特征工程
先对数据进行标准化处理,把训练机的特征值和测试集的特征值进行标准化处理
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.fit_transform(x_test)
4.机器学习(模型训练)
estimator=KNeighborsClassifier(n_neighbors=5)
estimator.fit(x_train,y_train)
5.模型评估
#(1)输出预测值
res=estimator.predict(x_test)
print(y_test)
print(res)
#(2)判断输出准确率,跟y_test进行对比
#找出测试值与预测值不同总数除以测试值总数
# 求准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test,res)#用来求准确率的函数
print('预测准确率:',accuracy)