机器学习教程
class1:
创建数据集 利用sklearn库自带的数据集创建 将数据集分成训练集和测试集 data = datasets.load_boston() # 加载房价数据 data_x = data.data data_y = data.target
class2:
创建模型 model = LinearRegression() 训练数据 model.fit(x,y) 生成类似y=ax+b形式的模型 a = model.coef_ b = model.intercept_ 返回模型定义的参数 model.get_params() 对预测值打分(R^2拟合度) model.score(y1, y2)
数据标准化
作用:
1.提升模型精度
2.提升收敛速度
方法:
sklearn库中提供了preprocessing模块,标准化数据通过减去均值然后除以方差(或标准差)
这种数据符合正态分布,转化函数为
X = (X - u)/q
a = 数据
处理后的数据 = preprocessing.scale(a)
适用于: 如果数据本身就副总正态分布,就可以使用这个方法
如果你的数据有许多异常值,使用均值和方差缩放可能并不是一个很好的选择,这种情况下
可以使用robust_scale以及RobustScaler,它们对数据的中心和范围使用更有鲁棒性的估计。
样本生成器
make_blob(), make_classification()
1.分类和聚类样本生成器
make_blob()
对于中心和各簇的标准偏差提供了更好的控制 可用于延时聚类
sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=None, cluster_std=1.0, center_box(-10.0, 10.0),
shuffle=True, random_state=None)
参数:
n_samples int或类数组,可选(默认值为100)。
如果是数组,则序列的每个元素表示每个聚簇的样本数量。
n_features int,可选(默认=2)
每个示例的特征数量。
centers int或shape数组[n_centers, n_features],可选(默认=无)
有两种情况,一种是int决定生成的中心数量,一种是array决定固定的中心位置。
如果n_samples是int,而centers为None,则生成3个中心。
如果n_samples是数组,则centers必须是None或长度等于n_samples长度的数组。
cluster_std float或浮点序列,可选(默认值为1.0)
聚簇的标准差。
center_box 浮点数对 (min, max), 可选(默认值=(-10.0,10.0))
当随机生成中心时,每个聚簇中心的边界框。
shuffle bool类型,可选(默认=True)
是否洗牌样本。
random_state int、RandomState实例或None(默认值)
相当于随机数种子,决定数据集创建的随机数生成。
返回值:
X array of shape [n_samples, n_features]
生成的样本
y array of shape [n_samples]
标签,标示样本属于那个聚簇,用整数表示
make_classification()
make_blob()对于中心和偏差的控制比较方便,而make_classification() 则是专门通过引入相关的多余的未知噪音特征 将高斯集群的每个类复杂化
sklearn.datasets.make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2,
n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None)
参数:
n_classes,类的数量
n_features, 总的特征数
n_informative 强指示性,提供功能性信息的特征数
n_redundant 冗余的特征个数
n_repeated 重复的特征个数
weight:各个类的占比
flip_y: y噪声值的比重
class_sep: 类与类之间区分清楚的程度
hypercube: 如果为True,则将簇放置在超立方体的顶点上。 如果为False,则将簇放置在随机多面体的顶点上。
shift : 将各个特征的值移动,即加上或减去某个值
scale: 将各个特征的值乘上某个数,放大或缩小
返回值:
X[n_samplles, n_informative + n_redundant + n_repeated]
y
2.回归生成器
make_regression() 产生的回归目标最为一个可选择的系稀疏性组合的具有噪声的随机的特征,用于
回归任务测试的样本生成器
class3:
交叉验证
代码为learn7、learn8
learning_curve函数的使用
该函数用来画学习曲线,可以直接返回训练样本、训练集分数、测试集分数
内部时根据交叉验证来获得分数的
学习曲线就是通过画出不同训练集大小时训练姐和交叉验证的准确率,可以看到模型在新数据(测试集)上的表现
从而判断模型的好坏
函数形式:
sklearn.model_selection.learning_curve(estimator, X, y, groups=None, train_sizes=array([0.1, 0.33, 0.55, 0.78, 1. ]), cv=’warn’, scoring=None, exploit_incremental_learning=False, n_jobs=None, pre_dispatch=’all’, verbose=0, shuffle=False, random_state=None, error_score=’raise-deprecating’)
重要参数:
estimator:需要传入的模型对象 如:SVC
x:需要传入的特征矩阵
y:需传入的标签
cv:可以有多中参数的值:
1.整数-指定KFlod中的折数,如cv=5 意为将x特征矩阵分为5份 最终分数也会有5份
2.None:默认为3折交叉验证
3.分割器:例如 ShuffleSplit()即按照传入的分割器进行分割
n_jobs:需要同时运行的cpu数,如果是-1 则调用所有cpu计算
返回值:
train_size_abs:返回生成的训练样本数 如[10, 100, 1000]
train_scores:返回训练集分数,该矩阵为(len(train_sizes_abs), cv分割数)维的分数,每行数据代表该样本数对应不同折数的分数
test_scores:同train_scores只不过这个对应的是测试集分数
方法一:
将数据分成训练集和测试集
弊端:
1.最终的模型与参数的选取将极大程度依赖训练集和测试集的划分比例
2.该方法只用了部分数据进行模型的训练
用于训练的数据量越大模型效果通常会更好
方法二:
交叉验证:(LOOCV方法)
该方法也包含训练集和测试集 但不同的是,我们只用一个数据作为测试集,其他数据都作为训练集
并将此步骤重复N次
结果是我们最终训练了N个模型,每次都能得到一个MSE,而计算最终的test MSE则是将这n个MSE区平均
方法三:
K折交叉验证
和LOOCV不同的是 我们每次的测试集将不在只包含一个数据,而是多个,具体数目根据K的选取决定
class4:
保存训练好的模型 learn10
python中的pickle模块
pickle模块的作用:
把python对象直接保存到文件中,不需要进行任何转化,也不需要底层的文件访问操作,而是直接把他们写入二进制文件中
主要方法:
1.将python数据转换并保存到pickle格式的文件中:
with open('data.picckle', 'wb') as f:
pickle.dump(data, f)
2.pickle.dumps(obj)
将python数据转换成pickle格式的bytes字串
3.pickle.load(file)
从pickle格式的文件中读取数据并转换成python类型
4.pickle.loads(bytes_obj)
将pickle格式的bytes字串转换成python的类型
需要代码的可以私信博主



