python svm超参数_python常见问题汇总

9b3f2bff3f1ca30c48bb33d0bad04329.png

这个文档是在学习python机器学习时遇到的一些问题汇总。有的时候有些不常用的处理时间之类的代码就记不起来,然后我就到这个文档里找。

确实是有点乱,但是我通常用ctrl+f,查找关键字,一般很快就能找出来,大家如果需要的话,也可以通篇先复制到word里。


# metrics衡量指标,误差度量

import sklearn.metrics as skm #聚类评估包

skm.silhouette_score(数据集,聚类结果) #此次聚类的Si

skm.calinski_harabaz_score(数据集,聚类结果)#此次聚类的CH 指标的Vrc, 结果越大越好

from sklearn import metrics #accuracy measure

from sklearn.metrics import accuracy_score #准确率

from sklearn.metrics import precision_score #精确率

from sklearn.metrics import recall_score #召回率

from sklearn.metrics import f1_score

from sklearn.metrics import classification_report #分类报告

from sklearn.metrics import roc_curve #ROC曲线

from sklearn.metrics import auc #roc曲线下的面积,越大越好

from sklearn.metrics import roc_auc_score #ROC得分

from sklearn.metrics import classification_report #分类评估报告

from sklearn.metrics import confusion_matrix #混淆矩阵

from sklearn.metrics import r2_score #r^2,残差

r2_score(lr_pre,y_test) #判断预测结果好坏

lr.intercept_ #方程截距,常数项

fpr,tpr,thre=roc_curve(test['y'],pre)

precision_score(average=)

average: string, [None, ‘micro’(微平均), ‘macro’(default)(宏平均), ‘samples’(加权平均), ‘weighted’]

from sklearn import cluster #聚类分析

#聚类k-means

读取数据:注意sheet_name=0/1/2..

将样本名称设为索引,并去掉一层:

data.index=data.企业

data=data.iloc[:,1:]

进行0-1标准化 对某列应用函数:

data=data.apply(lambda x:(x-min(x))/(max(x)-min(x)),axis=0)

建立模型:model=cluster.KMeans(3,max_iter=10) 参数为簇数,最大迭代次数

拟合数据:jieguo=model.fit(data)

查看分组结果:jieguo.labels_

查看最后一次中心点:jieguo.cluster_centers_

kmeans.inertia_ #sse

#交叉验证 模型选择

from sklearn.model_selection import KFold #K折交叉验证,样本量不足时使用,逻辑回归

from sklearn.model_selection import cross_val_score #score evaluation

from sklearn.model_selection import cross_val_predict #prediction

from sklearn.model_selection import GridSearchCV #重要程度,网格搜索,找最好的超参数

#超参数的设置

C=[0.001,0.01,0.05,0.1,0.2,0.3,0.25,0.4,0.5] # 7个参数,惩罚力度

gamma=[0.01,0.05,0.1,0.2,0.3,0.4] # 6个参数 核函数参数

kernel=['rbf','linear','poly'] # 3个参数,svm的不同核函数

hyper={'kernel':kernel,'C':C,'gamma':gamma}

gd=GridSearchCV(estimator=svm.SVC(),cv=10,param_grid=hyper,verbose=True) # 10次交叉验证cv=10,将模型拆为几份,每次选择一份作为验证集,共验证10次

gd.fit(X,Y)

print(gd.best_score_) #最好的评分

print(gd.best_estimator_) #最好的模型的各个参数

Accuracy = accuracy_score(y_test,predict) #准确率

cn = confusion_matrix(y_test,predict) #混淆矩阵

classification_report(y_test,predict) #精确率,召回率,准确率,分析报告

#importing all the required ML packages

from sklearn.linear_model import LogisticRegression #logistic regression,逻辑回归

from sklearn import svm #support vector Machine,支持向量机

from sklearn.neighbors import KNeighborsClassifier #KNN,k近邻

from sklearn.naive_bayes import MultinomialNB#贝叶斯#

from sklearn.naive_bayes import GaussianNB #高斯分布,朴素贝叶斯

#朴素贝叶斯 (条件特征独立) 相关系数(协方差/各自标准差之积)data.iloc[:,:10].corr(), r > 0.3 为有相关性, 热力图

#多项式(MultinomialNB) 要求特征(所有的X)为离散数据, 不要有负数, unique, value_counts

#训练集取值不全,会出现概率为0---》平滑处理 ,分子分母加各常数 alpha , alpha = 1 拉普拉斯平滑

#高斯(正态)(GaussianNB) 要求特征(所有的X)为连续数据,并且为正态分布

#正态性检验

#画图 直方图

#KS n>5000 ks ns<2000 sw H0:正态

正态性检验

From scipy import stats #sw 返回值(统计量, P-value)

stats.kstest(data["单价(平方米)Y"].values.reshape(-1,1),"norm") #ks,》5000,大样本

stats.shapiro(data.iloc[:,6].values) #sw,<2000,小样本

#伯努利分布(BernoulliNB) 要求特征(所有的X)二项分布数据 用到的少

#树模型

from sklearn.tree import DecisionTreeClassifier #决策树,分类

from sklearn.tree import DecisionTreeRegressor #决策树,回归

from sklearn.metrics import classification_report,分类报告

from sklearn.linear_model import LinearRegression #线性回归

#画决策树图

from sklearn.externals.six import StringIO

dot_data = StringIO() #解决中文乱码

#图形化树结构

dot_tree = tree.export_graphviz(cl_tr(模型),out_file=dot_data, #树的内容存入dot_data对象

feature_names=['有房','婚姻状况','年收入'],#X特征的列名

class_names=['否','是'],#去重后Y的取值,注意顺序别标反

filled=True, #是否有填充色

rounded=True #是否为圆角边

)

import graphviz

graph = graphviz.Source(dot_data.getvalue().replace("helvetica",'"Microsoft YaHei"')) #把dot_data 内容转化为图形

#replace("helvetica",'"Microsoft YaHei"') 是为解决中文乱码

#图形导出

graph.render("d:/ttt")

graph

#集成

from sklearn.ensemble import BaggingClassifier #并行,典型代表是随机森林

from sklearn.ensemble import RandomForestClassifier #Random Forest,随机森林,分类

from sklearn.ensemble import VotingClassifier #投票分类器,y为分类型数据

from sklearn.ensemble import AdaBoostClassifier #串行,boosting,分类

from sklearn.ensemble import AdaBoostRegressor #回归

from sklearn.ensemble import GradientBoostingClassifier

from xgboost.sklearn import XGBClassifier

import xgboost as xgb

model = LogisticRegression()

model .fit(X_train,y_train)

pred = mo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个SVM超参数对比的Python可视化案例。 首先,我们需要导入必要的库和数据集。在这个案例中,我们将使用Iris数据集。 ```python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Load the iris dataset iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` 接下来,我们定义一个函数来训练SVM,并返回测试集的准确率。 ```python def train_svm(C, gamma): # Create an SVM classifier svm = SVC(kernel='rbf', C=C, gamma=gamma) # Train the classifier on the training data svm.fit(X_train, y_train) # Make predictions on the testing data y_pred = svm.predict(X_test) # Calculate the accuracy of the classifier acc = accuracy_score(y_test, y_pred) return acc ``` 现在,我们可以使用这个函数来比较不同的超参数组合,并将结果可视化。 ```python # Define the range of values for C and gamma C_range = np.logspace(-3, 3, 7) gamma_range = np.logspace(-3, 3, 7) # Create a meshgrid of C and gamma values C, gamma = np.meshgrid(C_range, gamma_range) # Initialize an array to store the accuracy scores acc_scores = np.zeros((len(C_range), len(gamma_range))) # Calculate the accuracy score for each combination of C and gamma for i in range(len(C_range)): for j in range(len(gamma_range)): acc_scores[i, j] = train_svm(C_range[i], gamma_range[j]) # Plot the accuracy scores as a heatmap plt.figure(figsize=(10, 8)) plt.imshow(acc_scores, interpolation='nearest', cmap=plt.cm.hot) plt.xlabel('gamma') plt.ylabel('C') plt.colorbar() plt.xticks(np.arange(len(gamma_range)), gamma_range, rotation=45) plt.yticks(np.arange(len(C_range)), C_range) plt.title('SVM accuracy') plt.show() ``` 这将生成一个热图,显示不同的C和gamma值组合的准确性得分。 ![SVM hyperparameter comparison](https://i.imgur.com/7VdWZbQ.png) 从图中可以看出,当C和gamma的值都较小时,准确性得分较低。当C和gamma的值都较大时,准确性得分最高。此外,当C和gamma的值相等时,准确性得分也较高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值