遥感影像数据光谱特征,植被指数特征,纹理特征,树高特征,提取好后,利用随机森林分类代码
时间: 2023-07-28 15:09:43 浏览: 209
以下是使用Python中的scikit-learn库实现随机森林分类的代码,假设已经提取好了遥感影像数据的光谱特征、植被指数特征、纹理特征和树高特征,分别存储在X中,对应的分类标签存储在y中。
```python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 将数据集拆分为训练集和测试集,其中测试集占20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义随机森林分类器
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练分类器
rf_clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = rf_clf.predict(X_test)
# 计算准确率
accuracy = rf_clf.score(X_test, y_test)
print("随机森林分类器的准确率为:", accuracy)
```
其中,`n_estimators`参数指定了随机森林中决策树的数量,`random_state`参数指定了随机数种子,可以保证每次运行结果相同。最后输出的准确率即为分类器在测试集上的准确率。
相关问题
遥感影像光谱特征,植被指数特征,纹理特征,树高特征提取随机森林分类代码
以下是基于 Python 的遥感影像分类代码示例,使用了随机森林算法,提取了光谱特征、植被指数特征、纹理特征和树高特征。
```python
# 导入所需的库
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from skimage.feature import greycomatrix, greycoprops
from osgeo import gdal
# 读取图像
image = gdal.Open('image.tif')
bands_data = []
for i in range(image.RasterCount):
bands_data.append(image.GetRasterBand(i + 1).ReadAsArray())
bands_data = np.array(bands_data)
# 定义函数,用于计算纹理特征
def compute_texture_feature(band_data):
# 计算灰度共生矩阵
glcm = greycomatrix(band_data, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, normed=True, symmetric=True)
# 计算纹理特征
contrast = greycoprops(glcm, 'contrast').ravel()
dissimilarity = greycoprops(glcm, 'dissimilarity').ravel()
homogeneity = greycoprops(glcm, 'homogeneity').ravel()
energy = greycoprops(glcm, 'energy').ravel()
correlation = greycoprops(glcm, 'correlation').ravel()
asm = greycoprops(glcm, 'ASM').ravel()
return np.hstack([contrast, dissimilarity, homogeneity, energy, correlation, asm])
# 定义函数,用于提取特征
def extract_features(bands_data):
# 计算光谱特征
spectral_features = np.transpose(bands_data, [1, 2, 0]).reshape(-1, bands_data.shape[0])
# 计算植被指数特征
ndvi = (bands_data[3] - bands_data[2]) / (bands_data[3] + bands_data[2])
ndvi_features = ndvi.reshape(-1, 1)
# 计算纹理特征
texture_features = compute_texture_feature(bands_data[3])
# 计算树高特征
tree_height = bands_data[4]
tree_height_features = tree_height.reshape(-1, 1)
# 合并所有特征
features = np.hstack([spectral_features, ndvi_features, texture_features, tree_height_features])
return features
# 提取特征
features = extract_features(bands_data)
# 读取样本数据和标签
train_data = pd.read_csv('train_data.csv')
train_labels = train_data['label'].values
# 训练随机森林分类器
clf = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=0)
clf.fit(features[train_data.index], train_labels)
# 预测测试数据并计算准确率
test_data = pd.read_csv('test_data.csv')
test_labels = test_data['label'].values
test_features = extract_features(bands_data)
test_pred = clf.predict(test_features[test_data.index])
accuracy = accuracy_score(test_labels, test_pred)
print('Accuracy:', accuracy)
```
其中,`image.tif` 是待分类的遥感影像,`train_data.csv` 和 `test_data.csv` 是训练集和测试集的样本数据和标签,示例代码中使用了光谱数据的第 1~4 波段作为光谱特征,第 5 波段作为树高特征。你可以根据实际情况进行修改。
遥感影像数据光谱特征,植被指数特征,纹理特征,树高特征随机森林分类代码
以下是一个使用随机森林对遥感影像数据进行分类的Python代码示例,其中包括光谱特征、植被指数特征、纹理特征和树高特征。
```python
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 读取数据
data = pd.read_csv("data.csv")
# 将数据拆分为特征和标签
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 使用随机森林模型进行分类
classifier = RandomForestClassifier(n_estimators=100, random_state=0)
classifier.fit(X_train, y_train)
# 预测测试集结果
y_pred = classifier.predict(X_test)
# 输出准确率
print("Accuracy:", accuracy_score(y_test, y_pred))
```
在这个示例中,我们使用了一个包含光谱特征、植被指数特征、纹理特征和树高特征的数据集。我们首先将数据拆分为特征和标签,然后将其划分为训练集和测试集。我们使用sklearn中的随机森林模型进行分类,并使用训练数据进行拟合。最后,我们用测试集数据进行预测,并输出准确率。
阅读全文