本文共 2464 字,大约阅读时间需要 8 分钟。
X_norm=(X-X_min)/(X_max-X_min )
lambda x: (x - x.min()) / (x.max() - x.min())
Gaussian with zero mean and unit variance. z=(x-μ)/σ
numeric_feats = all_X.dtypes[all_X.dtypes != "object"].indexall_X[numeric_feats] = all_X[numeric_feats].apply(lambda x: (x - x.mean()) / (x.std()))
不能将类别特征简单表示为数字,因为模型会将类别解释成有序,实际上类别是任意排列的,这里可以用One-hot编码方式来表示。这样估计器将每个具有m个可能值的分类特征转换成m个二元特征,只有一个有效。
>>> enc = preprocessing.OneHotEncoder()>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>, handle_unknown='error', n_values='auto', sparse=True)>>> enc.transform([[0, 1, 3]]).toarray()array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])
>>> from sklearn.feature_extraction import DictVectorizer>>> vec = DictVectorizer()>>> vec.fit_transform(measurements).toarray()
or
all_X = pd.get_dummies(all_X, dummy_na=True)all_X = all_X.fillna(all_X.mean())
考虑到输入数据的非线性特征,往往会增加模型的复杂性。一种简单而常用的方法是多项式特征,它可以得到特征的高阶和交互项。它在PolynomialFeatures中实现
>>> import numpy as np>>> from sklearn.preprocessing import PolynomialFeatures>>> X = np.arange(6).reshape(3, 2)>>> X array([[0, 1], [2, 3], [4, 5]])>>> poly = PolynomialFeatures(2)>>> poly.fit_transform(X) array([[ 1., 0., 1., 0., 0., 1.], [ 1., 2., 3., 4., 6., 9.], [ 1., 4., 5., 16., 20., 25.]])
注意:当使用多项式核函数时,多项式特征隐式地用于核方法(例如,sklearn.svm.SVC,sklearn.decomposition.KernelPCA)。
创建多分类标签(LabelBinarizer())
>>> from sklearn import preprocessing>>> lb = preprocessing.LabelBinarizer()>>> lb.fit([1, 2, 6, 4, 2])LabelBinarizer(neg_label=0, pos_label=1, sparse_output=False)>>> lb.classes_array([1, 2, 4, 6])>>> lb.transform([1, 6])array([[1, 0, 0, 0], [0, 0, 0, 1]])
如果一个实例有多个标签(MultiLabelBinarizer())
>>> lb = preprocessing.MultiLabelBinarizer()>>> lb.fit_transform([(1, 2), (3,)])array([[1, 1, 0], [0, 0, 1]])>>> lb.classes_array([1, 2, 3])
标签规范化,将标签转化为0 ~ n_classes-1
>>> from sklearn import preprocessing>>> le = preprocessing.LabelEncoder()>>> le.fit([1, 2, 2, 6])LabelEncoder()>>> le.classes_array([1, 2, 6])>>> le.transform([1, 1, 2, 6])array([0, 0, 1, 2])>>> le.inverse_transform([0, 0, 1, 2])array([1, 1, 2, 6])
机器学习中样本缺失值的处理方法
机器学习中样本比例不平衡的处理方法
机器学习中的文本处理