机器学习应用程序的步骤
(1)收集数据
我们可以使用很多方法收集样本护具,如:
公司自有数据
制作网络爬虫从网站上抽取数据、
第三方购买的数据
合作机构提供的数据
从RSS反馈或者API中得到信息、设备发送过来的实测数据。
(2)准备输入数据
得到数据之后,还必须确保数据格式符合要求。
(3)分析输入数据
这一步的主要作用是确保数据集中没有垃圾数据。如果是使用信任的数据来源,那么可以直接跳过这个步骤
(4)训练算法
机器学习算法从这一步才真正开始学习。如果使用无监督学习算法,由于不存在目标变量值,故而也不需要训练算法,所有与算法相关的内容在第(5)步
(5)测试算法
这一步将实际使用第(4)步机器学习得到的知识信息。当然在这也需要评估结果的准确率,然后根据需要重新训练你的算法
(6)使用算法
转化为应用程序,执行实际任务。以检验上述步骤是否可以在实际环境中正常工作。如果碰到新的数据问题,同样需要重复执行上述的步骤
一、sklearn数据集
1、sklearn中的练习数据集
1.1、datasets.load_()
获取小规模数据集,数据包含在datasets里
#小数据集
#波士顿房价数据集 load_boston 回归 数据量:50613
#鸢尾花数据集 load_iris 分类 数据量:1504
#糖尿病数据集 load_diabetes 回归 数据量: 4210
#手写数字数据集 load_digits 分类 数据量:562064
..........
datasets.load_boston([return_X_y]) 加载并返回波士顿房价数据集(回归)。
datasets.load_breast_cancer([return_X_y])加载并返回乳腺癌威斯康星数据集(分类)。
datasets.load_diabetes([return_X_y])加载并返回糖尿病数据集(回归)。
datasets.load_digits([n_class,return_X_y]) 加载并返回数字数据集(分类)。
datasets.load_files(container_path [,...])加载带有类别的文本文件作为子文件夹名称。
datasets.load_iris([return_X_y]) 加载并返回虹膜数据集(分类)。
datasets.load_linnerud([return_X_y]) 加载并返回linnerud数据集(多元回归)。
datasets.load_sample_image(IMAGE_NAME) 加载单个样本图像的numpy数组
datasets.load_sample_images() 加载样本图像以进行图像处理。
datasets.load_svmlight_file(f [,n_features,...])将svmlight / libsvm格式的数据集加载到稀疏CSR矩阵中
datasets.load_svmlight_files(文件[,...]) 以SVMlight格式从多个文件加载数据集
datasets.load_wine([return_X_y]) 加载并返回葡萄酒数据集(分类)。
1.2datasets.fetch_()
获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/,要修改默认目录,可以修改环境变量SCIKIT_LEARN_DATA
数据集目录可以通过datasets.get_data_home()获取,clear_data_home(data_home=None)删除所有下载数据
#大数据集
#Olivetti 脸部图像数据集 fetch_olivetti_faces 降维
#新闻分类数据集 fetch_20newsgroups 分类
#带标签的人脸数据集 fetch_lfw_people 分类;降维 -
#加州房价数据 fetch_california_housing 回归
........
1.3datasets.make_()
2、sklearn中数据集的属性
load*和 fetch 函数返回的数据类型是 datasets.base.Bunch,本质上是一个 dict,它的键值对可用通过对象的属性方式访问。主要包含以下属性:*
- data:特征数据数组,是 n_samples ,n_features 的二维 numpy.ndarray 数组
- target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
- DESCR:数据描述
- feature_names:特征名
- target_names:标签名
3、获取小数据集
def get_data1():
#数据集获取(糖尿病数据集) #回归数据
li = load_diabetes()
#获取特征数据
print(li.data)
#获取目标值
print(li.target)
#获取描述信息
print(li.DESCR)
def get_data2():
#数据集获取(糖尿病数据集) #分类数据
li = load_iris()
#获取特征数据
print(li.data)
#获取目标值
print(li.target)
#获取描述信息
print(li.DESCR)
4、获取大数据集
def get_news():
# 获取分类数据(新闻)
news = fetch_20newsgroups(subset='all')
print(news.DESCR)
print(len(news.data))
#可选参数:
#subset: 'train'或者'test','all',可选,选择要加载的数据集:训练集的“训练”,测试集的“测试”,两者的“全部”,具有洗牌顺序
#data_home: 可选,默认值:无,指定数据集的下载和缓存文件夹。如果没有,所有scikit学习数据都存储在'〜/ scikit_learn_data'子文件夹中
#categories: 无或字符串或Unicode的集合,如果没有(默认),加载所有类别。如果不是无,要加载的类别名称列表(忽略其他类别)
#shuffle: 是否对数据进行洗牌
#random_state: numpy随机数生成器或种子整数
#download_if_missing: 可选,默认为True,如果False,如果数据不在本地可用而不是尝试从源站点下载数据,则引发IOError
5、获取本地生成数据
参考链接:数据科学学习手札21)sklearn.datasets常用功能详解
1、生成本地分类数据:
- sklearn.datasets.make_classification
- make_multilabel_classification
主要参数
"""
生成用于分类的数据集
:param n_samples:int,optional(default = 100),样本数量
:param n_features:int,可选(默认= 20),特征总数
:param n_classes:int,可选(default = 2),类(或标签)的分类问题的数量
:param random_state:int,RandomState实例或无,可选(默认=无)
返回值
:return :X,特征数据集;y,目标分类值
"""
案列
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
# X1为样本特征,Y1为样本类别输出, 共400个样本,每个样本2个特征,输出有3个类别,没有冗余特征,每个类别一个簇
X1, Y1 = make_classification(n_samples=400, n_features=2, n_redundant=0,
n_clusters_per_class=1, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()
2、生成本地回归模型数据:
- sklearn.datasets.make_regression
"""
生成用于回归的数据集
:param n_samples:int,optional(default = 100),样本数量
:param n_features:int,optional(default = 100),特征数量
:param coef:boolean,optional(default = False),如果为True,则返回底层线性模型的系数
:param random_state:随机数生成器使用的种子;
:return :X,特征数据集;y,目标值
"""
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_regression
# X为样本特征,y为样本输出, coef为回归系数(Y/X),共1000个样本,每个样本1个特征(特征过多时需要降维处理)
X, y, coef =make_regression(n_samples=1000, n_features=1,noise=10, coef=True)