Python 机器学习(一)

Python 机器学习(一)

1.熟悉任务和数据
2.所需的python包
3.第一个任务:鸢尾花分类问题

一、熟悉任务和数据

构建机器学习解决方案时需要列出下列问题的答案:
1)要回答什么问题,已经收集到的数据能够回答这个问题吗?
2)将我的问题表示成机器学习问题,用哪种方法最好?
3)收集的数据是否能表达我要解决的问题?
4)提取了数据哪些特征?这些特征能否正确实现预测?
5) 如何衡量应用是否成功?

回答:
1)从给定数据图像中识别太阳射电尖峰,可以

二、所需的python包

1)Numpy
科学计算基础包
2)Scipy
科学计算函数集合,线性代数高级程序
3)matplotlib
科学绘图库,生成可发布的可视化内容,数据可视化
4)pandas
处理和分析数据

三、鸢尾花分类问题

同时利用这个案例分析,如何利用Python进行模型训练测试。
1)调用数据

from sklearn.datasets import load_iris
iris_dataset=load_iris()
print("Keys of iris_dataset:/n{}".format(iris_dataset.keys()))
	'''此处类似输出了字典的形式'''
	'''输出iris_dataset的值'''
print("Target names:{}".format(iris_dataset['target_names']))
'''输出目标的名称'''
print("feature_names :\n{}".format(iris_dataset['feature_names']))
'''输出特征集的名称'''
'''格式为Numpy数组'''
print("First five rows of data:\n{}".format(iris_dataset['data'][:5]))
'''前五个样本的特征数值'''

2)导入数据之后可以对数据进行预处理:
数据预处理处理是对数据提前进行处理和修正。主要包括:特征提取,特征降维、特征空值处理、特征转换(one-hot)、特征归一化;目标值空值处理,目标值转换(one-hot)
(其中常用的是:降维、空值、one-hot转换、归一化。)
数据处理的方法可以在sklearn上找到

3)衡量模型是否成功:训练数据和测试数据
不能用构建模型的数据进行评估,所以需要将数据分为训练数据和测试数据
直接利用scikit-learn中的train_test_spllit将打乱数据集进行拆分,将75%的行数据及对应标签作为训练集,剩余作为测试集。(交叉验证)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(
    iris_dataset['data'],iris_dataset['target'],random_state=0
)
'''导入'''
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))
'''显示训练集与测试集类型'''

4)在构建机器学习模型之前,先检查一下数据——>常利用可视化的方法!
可视化方法举例:绘制散点图(解决散点图不能超过三维的方法是绘制散点图矩阵,但散点图矩阵无法同时显示所有特征之间的关系)

'''利用X_train中的数据创建Dataframe'''
'''利用iris_dataset.feature_names中的字符串对数据列进行标记'''
iris_dataframe =  pd.DataFrame(X_train,columns=iris_dataset.feature_names)
#建立了一个矩阵,行名=,列名=
print(iris_dataframe)
#显示创建的矩阵
# 利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize =(15,15),marker='o',
                                 hist_kwds={'bins':20},s=60,alpha=.8,cmap=mglearn.cm3)
'''第一个参数 dataframe:iris_dataframe 按行取数据
第二个参数 c=c=y_train 颜色,用不同着色度区分不同种类
三:figsize=(15,15) 图像区域大小,英寸为单位
四:marker=‘0’ 点的形状,0是圆,1是¥
五: hist_kwds={‘bins’:50} 对角线上直方图的参数元组
六:s=60 描出点的大小
七:alpha=.8 图像透明度,一般取(0,1]
八:cmap=mglearn.cm3 mylearn实用函数库,主要对图进行一些美化等私有功能,可见
'''
plt.show()#显示图片

在这里插入图片描述这段代码运行之后生成的散点图

5)K近邻算法
利用scikit-learn里的k近邻分类器
利用训练集中与新数据点距离最近的数据点,将找到的数据点的标签赋值给新数据点,也不一定是只考虑最近的一个,可为几个。
先对k近邻算法进行封装

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
'''knn对算法进行了封装,既包括用训练数据构建模型的算法,也包括对新数据点进行预测的算法
此处设邻居的数目为1'''
knn.fit(X_train,y_train)
'''调用knn对象的fit方法(返回knn对象本身,并做原处修改),输入参数为X_train,y_train'''

利用此算法做预测:
将测试数据放在一个numpy数组中

X_new=np.array([5,2.9,1,0.2])

调用Knn对象的predict方法进行预测

X_new=np.array([[5,2.9,1,0.2]])
'''将新的测试数据转换为二维numpy数组的一行,因为scikit-learn的输入数据必须是二维数组'''
#print("X_new.shape:{}".format(X_new.shape))
prediction=knn.predict(X_new)
print("Prediction:{}".format(iris_dataset['target_names'][prediction]))
'''调用predict模块进行预测'''
X_new.shape:(1, 4)
Prediction:['setosa']

评估模型(进行交叉验证之后的步骤):
这里用到之前创建的测试集
可以对测试数据中的每朵鸢尾花进行预测,并将预测结果与标签(已知的品种)进行对此,可以通过计算精度(品种预测正确的花所占的比例)衡量模型的优劣。

y_pred=knn.predict(X_test)
print("Test set score:{:.2f}".format(np.mean(y_pred=y_test)))

可以利用许多参数进行验证,常用得分、查准率、查全率、F1指数

此处介绍一下np.mean()函数:
mean() 函数定义:
numpy.mean(a, axis, dtype, out,keepdims )
mean()函数功能:求取均值
经常操作的参数为axis,以m * n矩阵举例:
axis 不设置值,对 mn 个数求均值,返回一个实数
axis = 0:压缩行,对各列求均值,返回 1
n 矩阵
axis =1 :压缩列,对各行求均值,返回 m *1 矩阵

a = np.array([[1, 2], [3, 4]])
a
array([[1, 2],
[3, 4]])
np.mean(a)
2.5
np.mean(a, axis=0) # axis=0,计算每一列的均值
array([ 2., 3.])
np.mean(a, axis=1) # 计算每一行的均值
array([ 1.5, 3.5])

print("Test set score :{:2f}".format(knn.score(X_test,y_test)))
'''也可以利用knn.score模块算出精度'''

knn.score模块介绍
score(self, X, y, sample_weight=None)
算出的为统计学中的预测系数R²
在这里插入图片描述

在这里插入图片描述
6)保存结果
7)错误分析

补充

学习python网址
‘https://www.runoob.com/python3/python3-comment.html’

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值