衡量“平均误差”的一种较为方便的方法,MSE越小,预测模型描述实验数据具有越高的精准度。
from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_predict)
import numpy as np
X = np.array([65,72,78,65,72,70,65,68])
Y = np.array([72,69,79,69,84,75,60,73])
np.corrcoef(X,Y)
array([[1. , 0.64897259],
[0.64897259, 1. ]])
train_corr = data_train1.corr()
一般采用双向表,堆叠柱状图和卡方检验进行分析
双向表:通过建立频次(次数)和频率(占比)的双向表来分析变量之间的关系,行和列分别标识一个变量
堆叠柱状图:更为直观
卡方检验:主要用于两个和两个以上样本率(构成比)及两个二值型离散变量的关联性分析,即比较理论频次与实际频次吻合程度或拟合优度
# 使用卡方检验筛选与目标变量相关的特征
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris() # 一组data,一组target
X,y = iris.data,iris.target
chiValues = chi2(X,y)
X_new = SelectKBest(chi2,k=2).fit_transform(X,y)
X_new # 为原X的后两列
有两个参数,一个是score_func,一个则是k.我们可以理解为,score_func是函数,它的作用是给特征进行打分,然后从高到底选取特征。那么特征该选取多少个呢?后面的k就是限定特征个数的,默认是选取10个特征。而score_func有很多,如果自己不定义,也就是采用默认的函数的话,是不能进行回归任务的,因为默认的函数是只能对分类的特征进行打分。由于score_func有很多函数,例如fclassif,即利用ANOVA方法来给特征打分,还有基于互信息的,卡方检验的方法来给特征打分后进行特征选择。同样,也存在给回归问题特征进行打分的,比如fregression ,以及mutual_info_regression等很多函数,可以在解决特定问题的时候再进行挑选。
SelectKBest这个类有一些方法可以调用,经常使用的一些如:fit,transform,fit_transform,inversetransform。
fit , transform 和 fittransform的关联。
所谓fit,英文意思就是使适合,使适应的意思,也就是从数据里面学习到一些特性,比如单个的fit(X),也就是学习到数据X的一些特征,比如mean和var等等,说白了也就是它需要从自身X去学得一些东西。如果是fit(X,y),则表明类似于监督学习,它是有label的,需要X,y去共同去学得一些东西。东西学到了,就要派上用场,transform就是学以致用。比如要想标准化,或者PCA降维,则需要先学习自身数据,对自己有了解,然后再transform。而fit_transform则相当于先使用fit,然后再transform.一般情况下都是先用fit_transform对训练集操作并转化,然后再用transform(test)对测试集进行操作。这样可以将训练集学习到的东西直接用于测试集上,这样可以避免用到未来数据。
from sklearn.preprocessing import StandardScaler
sc = StanardScaler()
sc.fit_transform(x_train)
sc.transform(x_test)
1。fit,如同上面所说的,fit一般是对自身的数据有所学习了解,并不应用,所以fit一般后面会再接一个函数transform。因此fit不返回特定的值,返回一个object
2.transform,学以致用,一般跟在fit后面,或在训练集上使用,应用在测试集上。所以返回的是最后的结果。那结果是什么,当然是selectkbest,也就是选的最好的k个特征组合成的数据集啦。所以transform(x)的return为matrix,其shape为(ori_row,n_seelcted_features).
3.fit_transform,一下完成fit and transform ,所以返回值和transform一样(由下面可以看出,两种方法的结果是一样的)
可绘制小提琴图,可分析类别变量在不同类别时,另一个连续变量的分布情况
sns.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100,
width=0.8, inner='box', split=False, dodge=True, orient=None,
linewidth=None, color=None, palette=None, saturation=0.75, ax=None)
x:指定小提琴图的x轴数据。
y:指定小提琴图的y轴数据。
hue:指定一个分组变量。
data:指定绘制小提琴图的数据集。
order:传递一个字符串列表,用于分类变量的排序。
hue_order:传递一个字符串列表,用于分类变量hue值的排序。
bw:指定核密度估计的带宽,带宽越大,密度曲线越光滑。
scale:用于调整小提琴图左右的宽度,如果为area,则表示每个小提琴图左右部分拥有
相同的面积;如果为count,则表示根据样本数量来调节宽度;如果为width,则表示每个
小提琴图左右两部分拥有相同的宽度。
scale_hue:bool类型参数,当使用hue参数时,是否对hue变量的每个水平做标准化处理,
默认为True。
width:使用hue参数时,用于控制小提琴图的宽度。
inner:指定小提琴图内部数据点的形态,如果为box,则表示绘制微型的箱线图;如果为
quartiles,则表示绘制四分位的分布图;如果为point或stick,则表示绘制点或小竖条。
split:bool类型参数,使用hue参数时,将小提琴图从中间分为两个不同的部分,默认为
False。
dodge:bool类型的参数,当使用hue参数时,是否绘制水平交错的小提琴图,默认为
True。
orient:指定小提琴图的呈现方向,默认为垂直方向。
linewidth:指定小提琴图的所有线条宽度。
color:指定小提琴图的颜色,该参数与palette参数一起使用时无效。
palette:指定hue变量的区分色。
saturation:指定颜色的透明度。
ax:指定子图的位置。
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data)
from sklearn.preprocessing import MinMaxScaler
#区间缩放,返回值为缩放到[0, 1]区间的数据
MinMaxScaler().fit_transform(iris.data)**
from sklearn.preprocessing import Normalizer
#归一化,返回值为归一化后的数据
Normalizer().fit_transform(iris.data)
二值化
from sklearn.preprocessing import Binarizer
#二值化,阈值设置为3,返回值为二值化后的数据
Binarizer(threshold=3).fit_transform(iris.data)
from sklearn.preprocessing import OneHotEncoder
#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
OneHotEncoder(categories='auto').fit_transform(iris.target.reshape((-1,1))) #reshape(1,-1)转化成1行
from numpy import vstack, array, nan
from sklearn.impute import SimpleImputer
#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
SimpleImputer().fit_transform(vstack((array([nan, nan, nan, nan]),
iris.data)))
(′1,′2,′3,′4,′5,′6,′7,′8,′9,′10,′11,′12,′13,′14,′15)=(1,1,2,3,4,21,1∗2,1∗3,1∗4,22,2∗3,2∗4,23,3∗4,24)
from sklearn.preprocessing import PolynomialFeatures
#多项式转换
#参数degree为度,默认值为2
PolynomialFeatures().fit_transform(iris.data)
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
#自定义转换函数为对数函数的数据变换
#第一个参数是单变元函数
FunctionTransformer(log1p, validate=False).fit_transform(iris.data)
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris
iris = load_iris()
#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
from array import array
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(
lambda X, Y: np.array(list(map(lambda x: pearsonr(x, Y), X.T))).T[0],
k=2).fit_transform(iris.data, iris.target)
from sklearn.datasets import load_iris
iris = load_iris()
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
import numpy as np
from sklearn.feature_selection import SelectKBest
from minepy import MINE
#由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
def mic(x, y):
m = MINE()
m.compute_score(x, y)
return (m.mic(), 0.5)
#选择K个最好的特征,返回特征选择后的数据
SelectKBest(
lambda X, Y: np.array(list(map(lambda x: mic(x, Y), X.T))).T[0],
k=2).fit_transform(iris.data, iris.target)
递归特征消除法RFE
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(multi_class='auto',
solver='lbfgs',
max_iter=500),
n_features_to_select=2).fit_transform(iris.data, iris.target)
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(
LogisticRegression(penalty='l2', C=0.1, solver='lbfgs',
multi_class='auto')).fit_transform(
iris.data, iris.target)
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
# GBDT作为基模型的特征选择
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data,
iris.target)
from sklearn.decomposition import PCA
#主成分分析法,返回降维后的数据
#参数n_components为主成分数目
PCA(n_components=2).fit_transform(iris.data)
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
#线性判别分析法,返回降维后的数据
#参数n_components为降维后的维数
LDA(n_components=2).fit_transform(iris.data, iris.target)
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, y_pred)
from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred)
from sklearn.metrics import mean_squared_error
Pred_Error = mean_squared_error(y_test, y_pred)
Sqrt(Pred_Error)
from sklearn.metrics import r2_score
r2_score(y_test, y_pred)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=.4, random_state=0)
from sklearn.model_selection import Kfold
kf = KFold(n_splits=10)
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
from sklearn.model_selection import LeavePOut
lpo = LeavePOut(p=5)