sklearn学习(一)

sklearn(scikit-learn)是一个第三方提供的非常实用的机器学习库,包含从数据预处理到训练模型的各个方面

sklearn 自带了一些示例数据集,现在对选择鸢尾花的数据集,并对其进行预处理

  • np.colunms_stack((data1,data1)) 按列合并两个数组 * row_stack
  • np.append(arr, values, axis=None) append values to original array
  • pd.options.display.max_columns = None
    pd.options.display.max_rows = None 加上这个两行代码 显示全部换行和列 而是不是显示部分
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
dataSet = load_iris()
data = dataSet['data'] # 数据
label = dataSet['target'] # 数据对应的标签
feature = dataSet['feature_names'] # 特征的名称
target = dataSet['target_names'] # 标签的名称
print(target)

df = pd.DataFrame( np.column_stack((data,label)), columns=np.append(feature,'label') )
df.head()# 查看前五行数据 

sklearn学习(一)_第1张图片
可以看出是三分类问题

有些数据可能会出现缺失值

  • True+True = 2
df.isnull().sum(axis=0).sort_values(ascending=False)/float(len(df))  # 检查缺失值比例 

sklearn的preprocessing中有提供Imputer()处理缺失值的函数,它提供了中位数、均值、众数等策略填充缺失值。但是不同情况下处理不一定使用填充来处理缺失值。因此在遇到缺失值的时候要慎重处理。幸运的是我们这个数据集中没有缺失值,这样节省了我们处理缺失值的时间。接下来要判断数据集的样本类别是否均衡。

df['label'].value_counts() # 检查数据类别的比例 

非常幸运,我们的样本类别的比例恰好是1:1:1,如果我们样本比例失衡严重,那么我们可能需要对失衡的比例做一些调整,例如重采样、欠采样等等。现在数据集看上去没有什么大的问题了,但是在训练之前,我们还是应当对数据进行标准化处理
模型训练之前,我们要对数据进行预处理。sklearn中的preprocessing模块提供非常多的数据归一化的类。
标准化之后的数据不仅可以提高模型的训练速度,并且不同的标准会带来不一样的好处。
sklearn学习(一)_第2张图片

from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(data)
  • fit、fit_transform和transform的用法区别:
    fit函数直接对数据集进行标准化,而fit_transform则是不仅对数据集进行处理(fit),还会存储fit的参数,然后transform使用储存好的相同参数对别的数据进行处理。

Z-Score的主要目的就是将不同量级的数据统一转化为同一个量级,统一用计算出的Z-Score值衡量,以保证数据之间的可比性。

df[:,1] - np.mean(df[:,1]))/np.std(df[:,1])      默认 z-score 归一标准化
  • 划分训练集和测试集
from sklearn import model_selection
generator = model_selection.ShuffleSplit(n_splits=12).split(data,label)
for train,test in generator:
    print("---------")
    print('train-datasets行号')
    print(train)
    print('test-datasets行号')
    print(test)

sklearn学习(一)_第3张图片

train,test=model_selection.train_test_split(data,train_size=0.9)

sklearn学习(一)_第4张图片

开始训练模型

generator = model_selection.ShuffleSplit(n_splits=12).split(data,label)
for train,test in generator:
    logisticRegression = LogisticRegression()
    logisticRegression.fit(data[train],label[train])
    result = logisticRegression.predict(data[test])
    print(classification_report(label[test],result))
    print(logisticRegression.score(data[test],label[test]))

sklearn学习(一)_第5张图片

你可能感兴趣的:(sklearn,python,机器学习)