回归与分类:监督机器学习
- 作者:成都软件开发
- 发表时间:2019-03-20 09:09
- 来源:未知
什么是机器学习中的回归和分类?
数据科学家使用许多不同类型的机器学习算法来发现大数据中的模式,从而产生可操作的洞察力。在高层次上,这些不同的算法可以根据他们“学习”数据进行预测的方式分为两组:监督和无监督学习。
监督机器学习: 大多数实际机器学习使用监督学习。监督学习是输入变量(x)和输出变量(Y)的地方,你使用算法来学习从输入到输出的映射函数 Y = f(X) 。目标是很好地近似映射函数,当您有新的输入数据(x)时,您可以预测该数据的输出变量(Y)。
监督机器学习算法的技术包括线性和逻辑回归,多类分类,决策树和支持向量机。监督学习要求用于训练算法的数据已经标记有正确的答案。例如,分类算法将学习在对动物物种正确标记的图像数据集和一些识别特征进行训练之后识别动物。
监督学习问题可以进一步分为回归和分类问题。这两个问题的目标都是构建一个简洁的模型,它可以从属性变量中预测从属属性的值。这两个任务之间的区别在于,依赖属性是回归的数字和分类的分类。
回归
回归问题是输出变量是实数或连续值,例如“薪水”或“重量”。可以使用许多不同的模型,最简单的是线性回归。它试图将数据与通过点的最佳超平面拟合。
回归模型的类型:
例如:
以下哪项是回归任务?
预测一个人的年龄
预测一个人的国籍
预测明天公司股价是否会上涨
预测文件是否与观察不明飞行物有关?
解决方案:预测一个人的年龄(因为它是一个真正的价值,预测国籍是绝对的,股票价格是否会增加是谨慎的 - 是/否答案,预测文件是否与UFO有关也是谨慎的 - 是/否答案)。
我们以线性回归为例。我们有住房数据集,我们想预测房子的价格。以下是它的python代码。
filter_none
编辑
play_arrow
brightness_4
# Python code to illustrate
# regression using data set
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
import pandas as pd
# Load CSV and columns
df = pd.read_csv("Housing.csv")
Y = df['price']
X = df['lotsize']
X=X.reshape(len(X),1)
Y=Y.reshape(len(Y),1)
# Split the data into training/testing sets
X_train = X[:-250]
X_test = X[-250:]
# Split the targets into training/testing sets
Y_train = Y[:-250]
Y_test = Y[-250:]
# Plot outputs
plt.scatter(X_test, Y_test, color='black')
plt.title('Test Data')
plt.xlabel('Size')
plt.ylabel('Price')
plt.xticks(())
plt.yticks(())
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(X_train, Y_train)
# Plot outputs
plt.plot(X_test, regr.predict(X_test), color='red',linewidth=3)
plt.show()
上面代码的输出将是:
在此图中,我们绘制测试数据。红线表示预测价格的最佳拟合线。使用线性回归模型进行单独预测:
print(str(round(regr.predict(5000))))
分类
分类问题是当输出变量是类别时,例如“红色”或“蓝色”或“疾病”和“无疾病”。分类模型试图从观察值中得出一些结论。给定一个或多个输入,分类模型将尝试预测一个或多个结果的值。
例如,在查看电子邮件“垃圾邮件”或“非垃圾邮件”时,查看交易数据,“欺诈”或“授权”。简而言之,分类既可以预测分类类标签,也可以根据训练集对数据进行分类(构建模型),并在分类属性时使用值(类标签),并将其用于分类新数据。有许多分类模型。分类模型包括逻辑回归,决策树,随机森林,梯度增强树,多层感知器,一对一休息和朴素贝叶斯。
例如:
以下哪个是分类问题?
通过他/她的笔迹风格预测一个人的性别
根据地区预测房价
预测明年季风是否正常
预测下个月将出售音乐专辑的副本数量
解决方案:预测一个人的性别预测明年季风是否正常。另外两个是回归。
我们用一些例子讨论了分类。现在有一个分类示例,我们使用python中的RandomForestClassifier对虹膜数据集进行分类。您可以从Here Dataset Description下载数据
集
标题:虹膜植物数据库
属性信息:
1.萼片长度,厘米
2.萼片宽度,单位为厘米
花瓣长度(厘米)
花瓣宽度以厘米为单位
上课:
- Iris Setosa
- Iris Versicolour
- Iris Virginica
缺少属性值:无
班级分布:3班每班33.3%
filter_none
编辑
play_arrow
brightness_4
# Python code to illustrate
# classification using data set
#Importing the required library
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
#Importing the dataset
dataset = pd.read_csv(
'https://archive.ics.uci.edu/ml/machine-learning-'+
'databases/iris/iris.data',sep= ',', header= None)
data = dataset.iloc[:, :]
#checking for null values
print("Sum of NULL values in each column. ")
print(data.isnull().sum())
#seperating the predicting column from the whole dataset
X = data.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
#Encoding the predicting variable
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
#Spliting the data into test and train dataset
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size = 0.3, random_state = 0)
#Using the random forest classifier for the prediction
classifier=RandomForestClassifier()
classifier=classifier.fit(X_train,y_train)
predicted=classifier.predict(X_test)
#printing the results
print ('Confusion Matrix :')
print(confusion_matrix(y_test, predicted))
print ('Accuracy Score :',accuracy_score(y_test, predicted))
print ('Report : ')
print (classification_report(y_test, predicted))
输出:
每列中NULL值的总和。
0 0
1 0
2 0
3 0
4 0
混淆矩阵:
[[16 0 0]
[0 17 1]
[0 0 11]]
准确度分数:97.7
报告:
精确召回f1-score支持
0 1.00 1.00 1.00 16
1 1.00 0.94 0.97 18
2 0.92 1.00 0.96 11
平均/总计0.98 0.98 0.98 45