Bonjour;

je suis entrain de faire une classification RF sur python, en utilisant une image satellite, j'ai réussi à obtenir le taux de classification, par contre j'arrive pas à visualiser ma classification sur l'image.

voici mon code et l'erreur obtenue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
import pandas as pd
import numpy as np
import gdal
from matplotlib import cm
from pandas.plotting import scatter_matrix
from pandas import DataFrame
import seaborn as sns
import matplotlib.pyplot as plt
import os
#os.environ['PROJ_LIB'] = 'C:\\Users\\Lenovo P50\\anaconda3\\envs\\myenv\\Library\\share\\proj'
#os.environ['GDAL_DATA'] = 'C:\\Users\\Lenovo P50\\anaconda3\\envs\\myenv\\Library\\share'
 
 
 
#### definir les inputs########
 
inpRaster = 'D:\code-python\img.tif' 
outRaster = 'D:\code-python\output.tif'
df = pd.read_csv('D:/code-python/RandomForest/test2/Echantillons_3CP_csv.csv', sep=';')
#read training data
#enter training data bands according to your csv columns name
data1 = df[['B1','B2','B3']]
#enter training label according to your csv column name
label1 = df['Class']
del df
 
 
#open raster
 
 
ds = gdal.Open(inpRaster, gdal.GA_ReadOnly)
rows = ds.RasterYSize
cols = ds.RasterXSize
bands = ds.RasterCount
geo_transform = ds.GetGeoTransform()
projection = ds.GetProjectionRef()
 
#read as array
array1 = ds.ReadAsArray()
ds = None
 
#Modify structure
array1 = np.stack(array1,axis=2)
array1 = np.reshape(array1,[rows*cols,bands])
test1 = pd.DataFrame(array1, dtype='int16')
del array1
 
 
from sklearn.model_selection import train_test_split
data_train, data_test, label_train, label_test = train_test_split(data1, label1, test_size=0.5, random_state=100)
 
#set classifier
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50,n_jobs=-1)
classifier.fit(data_train,label_train)
data_train
label_train
 
 
# #prédire les classes 
y_pred1= classifier.predict(test1) 
del test1
classification1 = y_pred1.reshape((rows,cols))
del y_pred1
 
# Create a GeoTIFF file with the given data
def createGeotiff(outRaster, data, geo_transform, projection):
    # Create a GeoTIFF file with the given data
    driver = gdal.GetDriverByName('GTiff')
    rows, cols = data1.shape
    rasterDS = driver.Create(outRaster, cols, rows, 1, gdal.GDT_Byte)
    rasterDS.SetGeoTransform(geo_transform)
    rasterDS.SetProjection(projection)
    rasterDS.GetRasterBand(1).WriteArray(data1)
    rasterDS = None
 
 
 #export classified image
createGeotiff(outRaster,classification1,geo_transform,projection)
 
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score, cohen_kappa_score
 
print(confusion_matrix(label_test,y_pred))
print(classification_report(label_test,y_pred))
print(accuracy_score(label_test, y_pred))
print(cohen_kappa_score(label_test,y_pred))
erreur

Traceback (most recent call last):

File "D:\code-python\classif_RF_FB.py", line 90, in <module>
createGeotiff(outRaster,classification1,geo_transform,projection)

File "D:\code-python\classif_RF_FB.py", line 85, in createGeotiff
rasterDS.GetRasterBand(1).WriteArray(data1)

File "C:\Users\Lenovo P50\anaconda3\envs\myenv\lib\site-packages\osgeo\gdal.py", line 2831, in WriteArray
return gdalnumeric.BandWriteArray(self, array, xoff, yoff,

File "C:\Users\Lenovo P50\anaconda3\envs\myenv\lib\site-packages\osgeo\gdal_array.py", line 415, in BandWriteArray
datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type)

File "C:\Users\Lenovo P50\anaconda3\envs\myenv\lib\site-packages\pandas\core\generic.py", line 5139, in __getattr__
return object.__getattribute__(self, name)

AttributeError: 'DataFrame' object has no attribute 'dtype'