快速入门Python机器学习(16)

简介: 快速入门Python机器学习(16)

8.4 SVR


8.4.1 SVR类参数、属性和方法



class sklearn.svm.SVR(*, kernel='rbf', degree=3, gamma='scale', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=- 1)


参数

属性

类型

解释

C

float, default=1.0

正则化参数。正则化的强度与C成反比,必须是严格正的。惩罚是l2惩罚的平方。

kernel

{'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'

指定要在算法中使用的内核类型。它必须是'linear''poly',' sigmoid','precomputed''callable'之一。如果没有给出,则使用'rbf'。如果给定了一个可调用函数,它将用于预计算内核矩阵。

gamma

{'scale', 'auto' or float, default='scale'

'rbf','poly''sigmoid'的核系数。如果gamma='scale '(默认值)被传递,那么它使用1 / (n_features * X.var())作为gamma的值,如果'auto',则使用1 / n_features


属性

属性

解释

class_weight_

ndarray of shape (n_classes,)

coef_

ndarray of shape (1, n_features)

dual_coef_

ndarray of shape (1, n_SV)

fit_status_

int

intercept_

ndarray of shape (1,)

n_support_

ndarray of shape (n_classes,), dtype=int32

shape_fit_

tuple of int of shape (n_dimensions_of_X,)

support_

ndarray of shape (n_SV,)

support_vectors_

ndarray of shape (n_SV, n_features)


方法

fit(X, y[, sample_weight])

根据给定的训练数据拟合SVM模型。

get_params([deep])

获取此估计器的参数。

predict(X)

X中的样本执行回归。

score(X, y[, sample_weight])

返回预测的确定系数R2

set_params(**params)

设置此估计器的参数。


8.4.2 分析make_regression无噪音

def SVR_for_make_regression():
       myutil = util()
       X,y = make_regression(n_samples=100,n_features=1,n_informative=2,random_state=8)
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       clf = SVR().fit(X,y)
       title = "make_regression SVR ()回归线(无噪音)"
       myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
       myutil.draw_line(X[:,0],y,clf,title)
       myutil.plot_learning_curve(SVR(),X,y,title)
       myutil.show_pic(title)


输出

make_regression LinearRegression()回归线(无噪音):
33.56%
make_regression LinearRegression()回归线(无噪音):
41.08%

image.png

image.png


结果非常糟糕


8.4.3 分析make_regression有噪音

def SVR_for_make_regression_add_noise():
       myutil = util()
       X,y = make_regression(n_samples=100,n_features=1,n_informative=2,noise=50,random_state=8)
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       clf = SVR().fit(X,y)
       title = "make_regression SVR ()回归线(有噪音)"
       myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
       myutil.draw_line(X[:,0],y,clf,title)
       myutil.plot_learning_curve(SVR(),X,y,title)
       myutil.show_pic(title)


输出

make_regression LinearRegression()回归线(有噪音):
18.74%
make_regression LinearRegression()回归线(有噪音):
18.98%

image.png

image.png

结果更加糟糕


8.4.4 SVR分析波士顿房价数据

def SVR_for_boston():
       myutil = util()
       boston = datasets.load_boston()
       X,y = boston.data,boston.target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state =8)
       for kernel in ['linear','rbf','sigmoid','poly']:
              svr = SVR(kernel=kernel)
              svr.fit(X_train,y_train)
              title = "SVR kernel=:"+kernel+"(预处理前)"
              myutil.print_scores(svr,X_train,y_train,X_test,y_test,title)
       scaler = StandardScaler()
       scaler.fit(X_train)
       X_train_scaler = scaler.transform(X_train)
       X_test_scaler = scaler.transform(X_test)
       for kernel in ['linear','rbf','sigmoid','poly']:
              svr = SVR(kernel=kernel)
              svr.fit(X_train_scaler,y_train)
              title = "SVR kernel=:"+kernel+"(预处理后)"
              myutil.print_scores(svr,X_train_scaler,y_train,X_test_scaler,y_test,title)


输出

SVR kernel=:linear(预处理前):
70.88%
SVR kernel=:linear(预处理前):
69.64%
SVR kernel=:rbf(预处理前):
19.20%
SVR kernel=:rbf(预处理前):
22.23%
SVR kernel=:sigmoid(预处理前):
5.94%
SVR kernel=:sigmoid(预处理前):
7.53%
SVR kernel=:poly(预处理前):
19.50%
SVR kernel=:poly(预处理前):
20.70%
SVR kernel=:linear(预处理后):
70.56%
SVR kernel=:linear(预处理后):
69.84%
SVR kernel=:rbf(预处理后):
66.50%
SVR kernel=:rbf(预处理后):
69.46%
SVR kernel=:sigmoid(预处理后):
56.44%
SVR kernel=:sigmoid(预处理后):
63.41%
SVR kernel=:poly(预处理后):
68.60%
SVR kernel=:poly(预处理后):
62.33%


kernel

linear

rbf      

sigmoid

poly

预处理前

70.88%/69.64%

19.20%/22.23%

5.94%/7.53%

19.50%/20.70%

预处理后

70.56%/69.84%

66.50%/69.46%

56.44%/63.41%

68.60%/62.33%


可见,除了linear,预处理后的得分远远高于处理前。scaler = StandardScaler()我们以前介绍过。

def SVR_for_boston_for_gamma():
       myutil = util()
       boston = datasets.load_boston()
       X,y = boston.data,boston.target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state =8)
       scaler = StandardScaler()
       scaler.fit(X_train)
       X_train_scaler = scaler.transform(X_train)
       X_test_scaler = scaler.transform(X_test)
       for kernel in ['linear','rbf','sigmoid','poly']:
                for gamma in ['scale', 'auto',0.1,0.01,0.001]:
                        svr = SVR(kernel=kernel)
                        svr.fit(X_train_scaler,y_train)
                        title = "SVR kernel=:"+kernel+",gamma="+str(gamma) 
                        myutil.print_scores(svr,X_train_scaler,y_train,X_test_scaler,y_test,title)
                        #myutil.plot_learning_curve(SVR(kernel=kernel),X,y,title)
                        #myutil.show_pic(title)输出


由于画图很花时间,这里不画了


输出

SVR kernel=:linear,gamma=scale:
70.56%
SVR kernel=:linear,gamma=scale:
69.84%
SVR kernel=:linear,gamma=auto:
70.56%
SVR kernel=:linear,gamma=auto:
69.84%
SVR kernel=:linear,gamma=0.1:
70.56%
SVR kernel=:linear,gamma=0.1:
69.84%
SVR kernel=:linear,gamma=0.01:
70.56%
SVR kernel=:linear,gamma=0.01:
69.84%
SVR kernel=:linear,gamma=0.001:
70.56%
SVR kernel=:linear,gamma=0.01:
69.84%
SVR kernel=:linear,gamma=0.001:
70.56%
SVR kernel=:linear,gamma=0.001:
69.84%
SVR kernel=:rbf,gamma=scale:
66.50%
SVR kernel=:rbf,gamma=scale:
69.46%
SVR kernel=:rbf,gamma=auto:
66.50%
SVR kernel=:rbf,gamma=auto:
69.46%
SVR kernel=:rbf,gamma=0.1:
64.18%
SVR kernel=:rbf,gamma=0.1:
66.96%
SVR kernel=:rbf,gamma=0.01:
56.81%
SVR kernel=:rbf,gamma=0.01:
60.37%
SVR kernel=:rbf,gamma=0.001:
22.75%
SVR kernel=:rbf,gamma=0.001:
24.48%
SVR kernel=:sigmoid,gamma=scale:
56.44%
SVR kernel=:sigmoid,gamma=scale:
63.41%
SVR kernel=:sigmoid,gamma=auto:
56.44%
SVR kernel=:sigmoid,gamma=auto:
63.41%
SVR kernel=:sigmoid,gamma=0.1:
35.92%
SVR kernel=:sigmoid,gamma=0.1:
39.85%
SVR kernel=:sigmoid,gamma=0.01:
49.05%
SVR kernel=:sigmoid,gamma=0.01:
52.26%
SVR kernel=:sigmoid,gamma=0.001:
13.84%
SVR kernel=:sigmoid,gamma=0.001:
14.82%
SVR kernel=:poly,gamma=scale:
68.60%
SVR kernel=:poly,gamma=scale:
62.33%
SVR kernel=:poly,gamma=auto:
68.60%
SVR kernel=:poly,gamma=auto:
62.33%
SVR kernel=:poly,gamma=0.1:
76.02%
SVR kernel=:poly,gamma=0.1:
63.72%
SVR kernel=:poly,gamma=0.01:
1.59%
SVR kernel=:poly,gamma=0.01:
1.03%
SVR kernel=:poly,gamma=0.001:
-2.36%
SVR kernel=:poly,gamma=0.001:
-2.66%


8.4.5 SVR分析糖尿病数据

#分析糖尿病数据
def SVR_for_diabetes_for_gamma():
       myutil = util()
       diabetes = datasets.load_diabetes()
       X,y = diabetes.data,diabetes.target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state =8)
       for kernel in ['linear','rbf','sigmoid','poly']:
              for gamma in ['scale', 'auto',0.1,0.01,0.001]:
                     svr = SVR(kernel=kernel,gamma=gamma)
                     svr.fit(X_train,y_train)
                     title = "SVR kernel=:"+kernel+",gamma="+str(gamma)
                     myutil.print_scores(svr,X_train,y_train,X_test,y_test,title)


输出

SVR kernel=:linear,gamma=scale:
-0.89%
SVR kernel=:linear,gamma=scale:
0.35%
SVR kernel=:linear,gamma=auto:
-0.89%
SVR kernel=:linear,gamma=auto:
0.35%
SVR kernel=:linear,gamma=0.1:
-0.89%
SVR kernel=:linear,gamma=0.1:
0.35%
SVR kernel=:linear,gamma=0.01:
-0.89%
SVR kernel=:linear,gamma=0.01:
0.35%
SVR kernel=:linear,gamma=0.001:
-0.89%
SVR kernel=:linear,gamma=0.001:
0.35%
SVR kernel=:rbf,gamma=scale:
18.30%
SVR kernel=:rbf,gamma=scale:
15.14%
SVR kernel=:rbf,gamma=auto:
-2.94%
SVR kernel=:rbf,gamma=auto:
-1.77%
SVR kernel=:rbf,gamma=0.1:
-2.94%
SVR kernel=:rbf,gamma=0.1:
-1.77%
SVR kernel=:rbf,gamma=0.01:
-3.18%
SVR kernel=:rbf,gamma=0.01:
-2.07%
SVR kernel=:rbf,gamma=0.001:
-3.20%
SVR kernel=:rbf,gamma=0.001:
-2.10%
SVR kernel=:sigmoid,gamma=scale:
37.86%
SVR kernel=:sigmoid,gamma=scale:
38.36%
SVR kernel=:sigmoid,gamma=auto:
-3.07%
SVR kernel=:sigmoid,gamma=auto:
-1.94%
SVR kernel=:sigmoid,gamma=0.1:
-3.07%
SVR kernel=:sigmoid,gamma=0.1:
-1.94%
SVR kernel=:sigmoid,gamma=0.01:
-3.19%
SVR kernel=:sigmoid,gamma=0.01:
-2.09%
SVR kernel=:sigmoid,gamma=0.001:
-3.20%
SVR kernel=:sigmoid,gamma=0.001:
-2.10%
SVR kernel=:poly,gamma=scale:
23.87%
SVR kernel=:poly,gamma=scale:
31.86%
SVR kernel=:poly,gamma=auto:
-3.20%
SVR kernel=:poly,gamma=auto:
-2.10%
SVR kernel=:poly,gamma=0.1:
-3.20%
SVR kernel=:poly,gamma=0.1:
-2.10%
SVR kernel=:poly,gamma=0.01:
-3.20%
SVR kernel=:poly,gamma=0.01:
-2.10%
SVR kernel=:poly,gamma=0.001:
-3.20%
SVR kernel=:poly,gamma=0.001:
-2.10%


分数很低,即使进行预处理,也没有用

目录
相关文章
|
1天前
|
机器学习/深度学习 传感器 物联网
【Python机器学习专栏】机器学习在物联网(IoT)中的集成
【4月更文挑战第30天】本文探讨了机器学习在物联网(IoT)中的应用,包括数据收集预处理、实时分析决策和模型训练更新。机器学习被用于智能家居、工业自动化和健康监测等领域,例如预测居民行为以优化能源效率和设备维护。Python是支持物联网项目机器学习集成的重要工具,文中给出了一个使用`scikit-learn`预测温度的简单示例。尽管面临数据隐私、安全性和模型解释性等挑战,但物联网与机器学习的结合将持续推动各行业的创新和智能化。
|
1天前
|
机器学习/深度学习 人工智能 算法
【Python 机器学习专栏】强化学习在游戏 AI 中的实践
【4月更文挑战第30天】强化学习在游戏AI中展现巨大潜力,通过与环境交互和奖励信号学习最优策略。适应性强,能自主探索,挖掘出惊人策略。应用包括策略、动作和竞速游戏,如AlphaGo。Python是实现强化学习的常用工具。尽管面临训练时间长和环境复杂性等挑战,但未来强化学习将与其他技术融合,推动游戏AI发展,创造更智能的游戏体验。
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
【Python机器学习专栏】深度学习在自动驾驶中的应用
【4月更文挑战第30天】本文探讨了深度学习在自动驾驶汽车中的应用及其对技术发展的推动。深度学习通过模拟神经网络处理数据,用于环境感知、决策规划和控制执行。在环境感知中,深度学习识别图像和雷达数据;在决策规划上,学习人类驾驶行为;在控制执行上,实现精确的车辆控制。尽管面临数据需求、可解释性和实时性挑战,但通过数据增强、规则集成和硬件加速等方法,深度学习将持续优化自动驾驶性能,并在安全性和可解释性上取得进步。
|
1天前
|
机器学习/深度学习 自然语言处理 PyTorch
【Python 机器学习专栏】自然语言处理中的深度学习应用
【4月更文挑战第30天】本文探讨了深度学习在自然语言处理(NLP)中的应用,包括文本分类、情感分析和机器翻译等任务。深度学习的优势在于自动特征学习、强大的表达能力和处理大规模数据的能力。常见模型如RNN、LSTM、GRU、CNN和注意力机制在NLP中发挥作用。Python的TensorFlow、PyTorch、NLTK和SpaCy等工具支持NLP研究。然而,数据稀缺、模型解释性和计算资源需求高等挑战仍待解决。随着技术进步,未来深度学习将进一步推动NLP发展,实现更智能的语言交互。
|
1天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】文本分类的机器学习应用
【4月更文挑战第30天】文本分类是机器学习中的关键应用,涉及文本预处理、特征提取和模型训练等步骤。常见方法包括基于规则、关键词和机器学习(如朴素贝叶斯、SVM、深度学习)。Python中可使用scikit-learn进行文本分类,例如通过TF-IDF和朴素贝叶斯对新闻数据集进行处理。随着技术发展,未来将深入研究深度学习在文本分类中的应用及多模态数据的利用。
|
1天前
|
机器学习/深度学习 算法 UED
【Python 机器学习专栏】A/B 测试在机器学习项目中的应用
【4月更文挑战第30天】A/B测试在数据驱动的机器学习项目中扮演关键角色,用于评估模型性能、算法改进和特征选择。通过定义目标、划分群组、实施处理、收集数据和分析结果,A/B测试能帮助优化模型和用户体验。Python提供工具如pandas和scipy.stats支持实验实施与分析。注意样本量、随机性、时间因素和多变量分析,确保测试有效性。A/B测试助力于持续改进机器学习项目,实现更好的成果。
|
1天前
|
机器学习/深度学习 数据采集 前端开发
【Python机器学习专栏】模型泛化能力与交叉验证
【4月更文挑战第30天】本文探讨了机器学习中模型泛化能力的重要性,它是衡量模型对未知数据预测能力的关键。过拟合和欠拟合影响泛化能力,而交叉验证是评估和提升泛化能力的有效工具。通过K折交叉验证等方法,可以发现并优化模型,如调整参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
|
1天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】机器学习中的过拟合与欠拟合
【4月更文挑战第30天】机器学习中,模型性能受数据、算法及复杂度影响。过拟合(训练数据学得太好,泛化能力弱)和欠拟合(模型太简单,无法准确预测)是常见问题。理解两者概念、原因、影响及检测方法对构建有效模型至关重要。解决策略包括增加数据量、简化模型、添加特征或选择更复杂模型。使用交叉验证等工具可帮助检测和缓解过拟合、欠拟合。
|
1天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
|
1天前
|
机器学习/深度学习 Python
【Python 机器学习专栏】堆叠(Stacking)集成策略详解
【4月更文挑战第30天】堆叠(Stacking)是机器学习中的集成学习策略,通过多层模型组合提升预测性能。该方法包含基础学习器和元学习器两个阶段:基础学习器使用多种模型(如决策树、SVM、神经网络)学习并产生预测;元学习器则利用这些预测结果作为新特征进行学习,生成最终预测。在Python中实现堆叠集成,需划分数据集、训练基础模型、构建新训练集、训练元学习器。堆叠集成的优势在于提高性能和灵活性,但可能增加计算复杂度和过拟合风险。

热门文章

最新文章