На самом деле это не проблема PCA, а просто переименование ваших столбцов: набор данных digits
имеет 64 столбца, и вы пытаетесь назвать столбцы в соответствии с именами столбцов для 4 столбцов в iris
набор данных.
Из-за характера набора данных цифр (пикселей) на столбцах действительно нет соответствующей схемы именования. Так что просто не переименуйте их.
digits = datasets.load_digits()
x = pd.DataFrame(digits.data)
pca = decomposition.PCA(n_components=2)
pca.fit(x)
x = pca.transform(x)
# Here is the result of your PCA (2 components)
>>> x
array([[ -1.25946636, 21.27488332],
[ 7.95761139, -20.76869904],
[ 6.99192268, -9.9559863 ],
...,
[ 10.80128366, -6.96025224],
[ -4.87210049, 12.42395326],
[ -0.34438966, 6.36554934]])
Тогда вы можете построить первый компьютер против второго, если это то, что вы собираетесь (что я собрал из вашего кода)
plt.scatter(x[:,0], x[:,1], s=40)
plt.show()
Используйте аннотацию @WebServlet ИЛИ элементы web.xml
. Не смешивайте их. https://www.codejava.net/java-ee/servlet/webservlet-annotation-examples показывает примеры указания параметров инициализации в аннотации.
Удалить аннотацию @WebServlet ("/ MyFirstServlet")
Сохранять только методы doGet () и doPost () и удалять все другие переменные и методы.
получить доступ к параметру init, используя следующий код.
public void init() {
String servletInitParameterValue = getServletConfig().getInitParameter("parInit");
System.out.println("servletInitParameterValue = "+ servletInitParameterValue);
String contextParameterValue = getServletContext().getInitParameter("ContextParameter");
System.out.println("contextParameterValue = "+ contextParameterValue ); }