赞
踩
data["列属性"].value_counts(normalize=True)
normalize=True:
dtype: int64
N 0.753
Y 0.247
normalize=False:
Name: fraud_reported, dtype: float64
NY 262
SC 248
data.unique()
pd.set_option('display.max_columns',500) 列
pd.set_option('display.max_rows',500) 行
ax = data.groupby('属性a').属性b.count().plot.bar(ylim=0)
table =pd.crosstab(data.age,data.fraud_reported) (行,列)
table.div(table.sum(1).astype(float),axis=0).plot(kind='bar',stacked=True) 因为列属性有两个类,所以使其总和为1显示
ax = sns.countplot(x='属性',data=s)
ax = (data['属性'].value_counts()*100.0/len(data)).plot.pie(autopct='%.1f%%',labels=['Male','Female'],fontsize=12)
#pie:表示饼图
#autopct:表示格式
#%.1f%%:第一个表示格式,.1f表示一位小数,%%表示百分号
true:直接在源数据上进行修改
false:创建新对象,然后覆盖
pd.cut(data.被划分的数据, bins, labels=names).astype(object)
bins:区间
lable:区间对应的标签
数字编码:
1.LabelEncoder
from sklearn.preprocessing import LabelEncoder
x['标签后'] = LabelEncoder().fit_transform(dummies['标签前'])
2.map
class_dict = {
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5,
'F': 6,
'G': 7,
}
train_data['class'] = train_data['class'].map(class_dict)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler(with_mean=False)
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
StandardScaler:计算均值和方差
fit_transform:训练数据用的
transform:测试数据用的
#随机森林
rfc = RandomForestClassifier(n_estimators=200)
#数据划分K折
kfold = KFold(n_splits=5, shuffle=True,random_state=7)
#交叉验证
result2 = cross_val_score(rfc, x_train_scaled, y_train, cv=kfold, scoring='accuracy')
#xgboot xgb = XGBClassifier() #逻辑回归 logreg= LogisticRegressionCV(solver='lbfgs', cv=cv) #KNN knn = KNeighborsClassifier(5) #SVC svcl = SVC() #ADAboost adb = AdaBoostClassifier() #决策树 dt = DecisionTreeClassifier(max_depth=5) #随机森林 rf = RandomForestClassifier() #LDA 线性判别 lda = LinearDiscriminantAnalysis() # gnb = GaussianNB()
L1:预测效果差、模型特征多,需要让一些不重要的特征系数归零,从而让模型稀疏化
solver只能选择liblinear,因为l1正则化损失函数不是连续可导的,而其他三种都是需要二阶导数
L2:解决过拟合
solver四种皆可
ovr | mvm | |
---|---|---|
二元 | 相同 | 相同 |
多元 | 略差,速度快 | 精确,速度慢 |
solver | 四种皆可 | 除了liblinear皆可 |
默认:不考虑权重
balance:根据数据量自动分配,样本量越多,权重越低
自定义权重比例:{0:0.9,1:0.1}
在调用fit函数时使用
若class__weight 和 sample_weight都使用,权重就是
class__weight *sample_weight
C=[0.01,0.1,1,10,100]
从中选出最好的
from sklearn import linear_model
logistic = linear_model.LogisticRegression()
#如果用正则化,可以添加参数penalty,可以是l1正则化(可以更有效的抵抗共线性),也可以是l2正则化,如果是类别不均衡的数据集,可以添加class_weight参数,这个可以自己设置,也可以让模型自己计算
logistic = linear_model.LogisticRegression( penalty='l1', class_weight='balanced')
logistic.fit(X_train,y_train)
y_pred = logistic.predict( X_test)
#如果只想预测概率大小,可以用下面这个函数
y_pred = logistic.predict_proba(X_test)
默认是决策树
若为其他,则要指定样本权重
默认50次
默认1
samme:样本集预测错误的概率进行划分
samme.r:(默认)样本集预测错误的比例进行划分
params = { 'booster': 'gbtree', 'objective': 'multi:softmax', # 多分类的问题 'num_class': 10, # 类别数,与 multisoftmax 并用 'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。 'max_depth': 12, # 构建树的深度,越大越容易过拟合 'reg_lambda': 2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。 'subsample': 0.7, # 随机采样训练样本 'colsample_bytree': 0.7, # 生成树时进行的列采样 'min_child_weight': 3, 'silent': 1, # 设置成1则没有运行信息输出,最好是设置为0. 'learning_rate': 0.007, # 如同学习率 'reg_alpha':0, # L1 正则项参数 'seed': 1000, 'nthread': 4, # cpu 线程数 }
n_neighbors
: int,optional(default = 5)weights
: str或callable,可选(默认=‘uniform’)algorithm
: {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选leaf_size
: int,optional(默认值= 30)p
: 整数,可选(默认= 2)metric
: 字符串或可调用,默认为’minkowski’metric_params
: dict,optional(默认=None)n_jobs
: int或None,可选(默认=None)from sklearn.feature_selection import SelectFromModel from numpy import sort from xgboost import XGBClassifier from sklearn.metrics import accuracy_score #搭建模型并训练 xgb = XGBClassifier() xgb.fit(x_train_scaled,y_train) xgb_pred = xgb.predict(X_test_scaled) predictions = [round(value) for value in xgb_pred] accuracy = accuracy_score(xgb_pred,y_test) print("Accuracy: %.2f%%"%(accuracy*100.0)) #获取特征重要程度排行值 thresholds = sort(xgb.feature_importances_) #根据排行值进行特征的选择 for threshold in thresholds: selected = SelectFromModel(xgb,threshold=threshold,prefit=True) selected_x_train = selected.transform(x_train_scaled) selected_model = XGBClassifier() selected_model.fit(selected_x_train,y_train) selected_x_test = selected.transform(X_test_scaled) selected_predict = selected_model.predict(selected_x_test) selected_predictions = [round(values) for values in selected_predict] selected_accuracy = accuracy_score(y_test,selected_predict) print("Thresholds: %.3f,n=%d,Accuracy: %.2f%%"%(threshold,selected_x_train.shape[1],selected_accuracy*100.0))
画图查看重要程度
from xgboost import XGBClassifier,plot_importance
xgb = XGBClassifier()
xgb.fit(x_train_scaled,y_train)
plt.rcParams['figure.figsize']=[25,20]
plot_importance(xgb)
plt.show()
from pprint import pprint
pprint(xgb.get_params())
1.estimator 选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。 每一个分类器都需要一个scoring参数,或者score方法: 如estimator=RandomForestClassifier( min_samples_split=100, min_samples_leaf=20, max_depth=8, max_features=‘sqrt’, random_state=10), 2.param_grid 需要最优化的参数的取值,值为字典或者列表,例如: param_grid =param_test1, param_test1 = {‘n_estimators’:range(10,71,10)}。 scoring=None 模型评价标准,默认None,这时需要使用score函数;或者如scoring=‘roc_auc’, 根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象, 需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。 4.n_jobs=1 n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值 5.cv=None 交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield产生训练/测试数据的生成器。 6.verbose=0, scoring=None verbose:日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。 7.pre_dispatch=‘2*n_jobs’ 指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM, 而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次 8.return_train_score=’warn’ 如果“False”,cv_results_属性将不包括训练分数。 9.refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行, 作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。 10.iid:默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。